Однократные функции
Однократные функции
Пусть константный объект - это функция. Например, i можно (в иллюстративных целях) описать внутри самого класса COMPLEX как
i: COMPLEX is
-- Комплексное число, re= 0, а im= 1
do
create Result.make_cartesian (0, 1)
end
Это почти решает нашу задачу, поскольку функция всегда возвратит ссылку на объект нужного вида. Коль скоро мы полагаемся на обычную процедуру создания объекта, условие инварианта будет соблюдено, - как следствие, получим корректный объект.
Однако результат не соответствует потребностям: каждое обращение клиента к i порождает новый объект, идентичный всем остальным, а это - трата времени и пространства. Поэтому необходим особый вид функции, выполняемой только при первом вызове. Назовем такую функцию однократной (once function). В целом она синтаксически аналогична обычной функции и отличается лишь служебным словом once, начинающего вместо do ее тело:
i: COMPLEX is
-- Комплексное число, re= 0, im= 1
once
create Result.make_cartesian (0, 1)
end
При первом вызове однократной функции она создает объект, который представляет желаемое комплексное число, и возвращает на него ссылку. Каждый последующий вызов приведет к немедленному завершению функции и возврату результата, вычисленного в первый раз. Что касается эффективности, то обращение к i во второй, третий и т.д. раз должно отнимать времени ненамного больше, чем операция доступа к атрибуту.
Результат, найденный при первом вызове однократной функции, может использоваться во всех экземплярах класса, включая экземпляры потомков, где эта функция не переопределена. Переопределение однократных функций как обычных (и обычных как однократных) допускается без всяких ограничений. Так, если COMPLEX1, порожденный от класса COMPLEX, заново определяет i, то обращение к i в экземпляре COMPLEX1 означает вызов переопределенного варианта, а обращение к i в экземпляре самого COMPLEX или его потомка, отличного от COMPLEX1, означает вызов однократной функции, то есть значения, найденного ею при первом вызове.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
5.8.7 Функции
5.8.7 Функции СинтаксисОболочка bash позволяет пользователю создавать собственные функции. Функции ведут себя и используются точно так же, как обычные команды оболочки, т. е. мы можем сами создавать новые команды. Функции конструируются следующим образом: function name () {list}Причем
19.7.8. Функции
19.7.8. Функции Описание функции выглядит так: имя() { список; }Пример:cdir(){ # изменяем каталог cd / }При выполнении функция не создает нового процесса, а выполняется в среде процесса, содержащего эту функцию. Аргументы функции можно передать ей как обыкновенные параметры при
10.16 Функции TCP
10.16 Функции TCP Данная глава посвящена многочисленным функциям TCP. Ниже перечислены основные из них:? Связывание портов с соединениями? Инициализация соединений посредством трехшагового подтверждения? Выполнение медленного старта, исключающего перегрузку
8.6. Функции
8.6. Функции Оператор определения функции имеет следующий синтаксис:[function] имя() { список}Определять функцию можно в любом месте сценария, но вызов ее должен осуществляться строго после описания. Вызывается функция подобно любой команде — по имени. Переданные ей аргументы
3.1. Функции
3.1. Функции Пример 1.7: Функция вычисляющая факториал.VAR A, Y : INTEGER;FUNCTION FAKTORIAL (N : INTEGER) : INTEGER; VAR F, K : INTEGER; BEGIN F := 1; FOR K := 1 TO N DO F := F * K; FAKTORIAL := F END; BEGINWRITELN (‘ВВЕДИТЕ ЦЕЛОЕ ПОЛОЖИТЕЛЬНОЕ ЧИСЛО’);READLN (A);Y := FAKTORIAL (A);WRITELN (‘N!=’, Y);READLN;READLNEND.Обратите внимание на то, что в описании функции
3. Функции
3. Функции В C есть только функции, а процедур нет.Тело функции не может содержать в себе определения других функций.Функцию можно вызвать из другой функции.Оператор return возвращает выполнение программы в точку вызова функции.При использовании return; функция
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из
Функции
Функции Excel – серьезная программа для вычислений, одним из главных достоинств которой является множество встроенных функций. Это обширная тема, достойная если не книги, то главы в многотомном руководстве. Рассмотрим ее кратко – ровно настолько, чтобы вы могли далее
1.5 Функции
1.5 Функции Функция – это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется. Рассмотрим программу, печатающую степени числа 2:extern float pow(float, int); //pow() определена в другом местеmain() (* for (int i=0; i«10; i++) cout „« pow(2,i) ««
Однократные процедуры
Однократные процедуры Функция close должна вызываться только один раз. Контроль над количеством ее вызовов рекомендуется возложить на глобальную переменную приложения. Из руководства к коммерческой библиотеке функций языка C Механизм однократных функций интересен и
Однократные функции, закрепление и универсальность
Однократные функции, закрепление и универсальность В этом разделе мы обсудим конкретную техническую проблему, поэтому при первом чтении книги его можно пропустить.Однократные функции, тип которых не является встроенным, вносят потенциальную несовместимость с
У18.2 Однократные функции для эмуляции unique-значений
У18.2 Однократные функции для эмуляции unique-значений Покажите, что в языке без поддержки unique-объявлений результат, аналогичныйvalue: INTEGER is uniqueможно получить, воспользовавшись объявлением видаvalue: INTEGER is once...endгде вам необходимо написать тело однократной функции и все, что
У18.3 Однократные функции в родовых классах
У18.3 Однократные функции в родовых классах Приведите пример однократной функции, чей результат включает родовой параметр, и, если он не корректен, порождает ошибку времени
У18.4 Однократные атрибуты?
У18.4 Однократные атрибуты? Исследуйте полезность понятия "однократного атрибута", полученного по образцу однократной функции? Будет ли такой атрибут общим для всех экземпляров класса? Как инициализировать однократные атрибуты? Являются ли они избыточными при наличии