к оглавлению

Управляющие структуры и операторы Clarion

Управляющие структуры

ACCEPT (обработчик событий)

ACCEPT

операторы

END

ACCEPT Обработчик события.

операторы Операторы программы.

Цикл ACCEPT - это обработчик событий, предназначенный для обслуживания событий, порожденных Windows для структур APPLICATION и WINDOW. Окно и ACCEPT-цикл тесно связаны друг с другом - при открытии окна последующий ACCEPT-цикл будет обрабатывать все события именно для данного окна.

По выполнению оператор ACCEPT сходен с оператором цикла LOOP - внутри него можно использовать операторы BREAK и CYCLE. ACCEPT-цикл исполняется всякий раз, когда возникающее событие требует определенных действий со стороны программы. ACCEPT ожидает события от процедур библиотеки времени исполнения с тем, чтобы обработать его посредством исполнения операторов. Пока ACCEPT ждет события, управление передается процедурам библиотеки времени исполнения для автоматической обработки стандартных Windows-событий - тех, которые не требуют программных действий (например, восстановление графического образа экрана).

Текущие значения USE-переменных всех STRING-полей (в верхнем окне каждого процесса) автоматически отображаются на экран всякий раз, когда программа возвращается в начало ACCEPT-цикла. Следовательно, отпадает необходимость в явном исполнении оператора DISPLAY, чтобы обновить экран данными, предназначенными только для отображения. Если не было установлено свойство PROP:Auto, отвечающее за автоматическое отображение всех USE-переменных во время последующей итерации ACCEPT-цикла, то значения USE-переменной поля любого другого типа автоматически отображаются на экран при возникновении событий, связанных с этим полем.

Внутри ACCEPT-цикла программа уточняет какое событие произошло, используя следующие процедуры:

EVENT() Возвращает значение, показывающее что произошло. В файле EQUATES.CLW находятся символические константы для событий.

FIELD() Возвращает номер поля, с которым связано событие, если это - событие связанное с полем.ГЛАВА 8 ОПЕРАТОРЫ РАБОТЫ С ОКНАМИ 369

ACCEPTED() Возвращает номер поля, с которым связано событие, если последнее является EVENT:Accepted событием.

SELECTED() Возвращает номер поля, c которым связано событие, если последнее является EVENT:Selected событием.

FOCUS() Возвращает номер поля владеющего фокусом; тип события не играет роли.

MOUSEX() Возвращает x-координату курсора мыши.

MOUSEY() Возвращает y-координату курсора мыши.

Есть два события, которые влекут за собой неявное выполнение оператора BREAK в ACCEPT-цикле: сигналы на закрытие окна (EVENT:CloseWindow) и на выход из программы (EVENT:CloseDown). Программа не обязана отслеживать эти события, поскольку они отрабатываются автоматически. Однако, иногда приходится к этим событиям “привязывать” выполнение некоторых специфических действий, например, отображение на экран окна “You sure?” (“Вы уверены?”) или отработку внутренних ситуаций. Если здесь воспользоваться оператором CYCLE, то управление вернется к началу ACCEPT-цикла без закрытия окна или выхода из программы.

Аналогичным образом оператор CYCLE завершает действие событий: EVENT:Move, EVENT:Size, EVENT:Restore, EVENT:Maximize и EVENT:Iconize. При возникновении одного из них CYCLE завершает действие события и запрещает порождение события, связанного с первым, - соответственно: EVENT:Moved, EVENT:Sized, EVENT:Restored, EVENT:Maximized или EVENT:Iconized.

Пример:

CODE

OPEN(Window)

ACCEPT ! Обработчик событий

CASE FIELD()

OF 0 ! Обработать не связанные с полем события

CASE EVENT()

OF EVENT:Move

CYCLE ! Запретить пользователю перемещать окно

OF EVENT:Suspend

CASE FOCUS()

OF ?Field1

! Что-то сохранить

END

OF EVENT:Resume

! Восстановить сохраненное

END

OF ?Field1 ! Обработать события поля Field1

CASE EVENT()

OF EVENT:Selected

! предварительные действия, связанные с field1

OF EVENT:Accepted

! завершающие действия для field1

END

END !CASE FIELD

END !ACCEPT LOOP

Смотри также: EVENT, Модальные события, APPLICATION, WINDOW, FIELD, FOCUS, ACCEPTED, SELECTED, CYCLE, BREAK

 

CASE (структура условного выполнения)

CASE условие

OF выражение [ TO выражение ]

операторы

[ OROF выражение [ TO выражение ] ]

операторы

[ ELSE ]

операторы

END

CASE Начинает структуру условного выполнения

условие Числовая или строковая переменная или выражение.

OF Когда выражение следующее за OF равно условию в операторе CASE, то выполняются идущие следом за OF операторы. В структуре CASE может быть много ветвей OF.

выражение Числовая или строковая константа, переменная или выражение.

TO Позволяет указать в операторе OF или OROF диапазон значений. Операторы, следующие за OF (или OROF), выполняются, когда значение условия попадает в диапазон, указанный выражениями. Выражение, следующее за OF (или OROF), должно задавать нижнюю, а следующее за TO, - верхнюю границу диапазона.

OROF Операторы, следующие за OROF, выполняются, когда выражение, стоящее после него, равно условию в операторе CASE. С одним OF может быть связано несколько выражений OROF. OROF может находиться в отдельной строке. OROF не завершает предыдущую группу операторов, поэтому управляющие операторы “входят” в OROF.

ELSE Операторы, следующие за ELSE, выполняются, когда значение выражений во всех предыдущих ветвях OF или OROF не удовлетворяло условию в CASE. Ветвь ELSE необязательна, однако, если она присутствует, то должна быть последней ветвью в структуре.

операторы Любые допустимые исполняемые операторы языка Clarion.

Структура CASE позволяет избирательно выполнять отдельные ветви, основываясь на равенстве условия и выражения (или попадании в диапазон). Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры могут быть вложены в нее. Структура CASE должна оканчиваться оператором END (или точкой).

В тех случаях, когда логика программы позволяет использовать или структуру CASE или составную структуру IF/ELSIF, для структуры CASE чаще всего генерируется более эффективный объектный код. А для тех случаев, когда выбор происходит на основе целочисленного (от 1 до n) результата вычисления выражения , более эффективно использование структуры EXECUTE.

Что касается использования форм OF-TO и OROF-TO, оба выражения будут обработаны, даже если значение CASE-выражения меньше нижней границы указанного диапазона.

Например:

CASE A

OF Func1() TO Func2()

...

END

В этом случае, обе функции Func1() и Func2() будут вызваны, даже если A < Func1().

Примеры:

CASE ACCEPTED() !Обработка вводимого поля

OF ?Name !Если поле Name

ERASE(?Address,?Zip) ! очистить поля от Address до Zip

GET(NameFile,NameKey) ! прочитать запись

CASE Action ! Что за действие?

OF 1 ! добавление, запись не существует

IF NOT ERRORCODE() ! должна быть ошибка, если запись уже есть

ErrMsg = 'ALREADY ON FILE' ! вывести сообщение

DISPLAY(?Address,?Zip) ! вывести поля от Address до Zip

SELECT(?Name) ! повторно ввести имя

END

OF 2 OROF 3 ! изменение или удаление - запись существует

DISPLAY(?Address,?Zip) ! вывести поля от Address до Zip

END ! конец структуры CASE Action

 

CASE Name[1] ! Взять первую букву имени

OF 'A' TO 'M' ! Первая половина латинского алфавита

OROF 'a' TO 'm'

DO FirstHalf

OF 'N' TO 'Z' OROF 'n' TO 'z' ! Вторая половина латинского алфавита

DO SecondHalf

END ! Конец структуры CASE

OF ?Address ! Если это поле Address

DO AddressVal ! Выполнить подпрограмму проверки значения поля

END !Конец структуры case accepted()

Смотри также: EXECUTE, IF

 

EXECUTE (структура выбора оператора)

EXECUTE выражение

оператор 1

оператор 2

[ BEGIN

операторы

END ]

оператор n

[ ELSE ]

оператор

END

EXECUTE Начинает структуру, избирательно выполняющую отдельный оператор.

выражение Целочисленное выражение или переменная, содержащая целое число.

оператор 1 Единичный оператор, который выполняется только, когда выражение равно 1.

оператор 2 Единичный оператор, который выполняется только, когда выражение равно 2.

BEGIN Оператор BEGIN отмечает начало операторной структуры, содержащей ряд строк исходного текста. В ЕXECUTE такая структура рассматривается как единичный оператор. Структура BEGIN заканчивается точкой или оператором END.

оператор n Единичный оператор, который выполняется только, когда выражение равно n .

ELSE Операторы, следующие за ELSE исполняются, когда выражение принимает значение вне диапазона от 1 до n, где n определено как совокупное число единичных операторов между EXECUTE и ELSE.

оператор Единственный оператор, который выполняется, когда выражение выходит за пределы допустимого диапазона.

Основываясь на значении выражения, структура ЕXECUTE выбирает исполняемый оператор (или операторную структуру). Структура EXECUTE должна оканчиваться оператором END (или точкой).

Если выражение равно 1, то выполняется первый оператор (оператор 1). Если выражение равно 2, то выполняется второй (оператор 2) и так далее. Если значение выражения равно 0 или больше числа операторов (или структур) в структуре EXECUTE, то выполняется оператор после слова ELSE. Если слово ELSE отсутствует, происходит переход на первый оператор, стоящий после структуры ЕXECUTE.

Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры (IF, CASE, LОOP, ЕXECUTE и BEGIN) могут быть вложены в нее. В тех случаях, логика программы допускает использование и структуры EXECUTE и структур CASE и IF/ELSIF, для EXECUTE генерируется более эффективный объектный код, и предпочтительнее использовать ее.

Пример:

EXECUTE Transact ! Какую транзакцию выполнять

ADD(Customer) ! Выполнить, если Transact = 1

PUT(Customer) ! Выполнить, если Transact = 2

DELETE(Customer) ! Выполнить, если Transact = 3

END ! Конец структуры

EXECUTE CHOICE() ! В зависимости от значения функции CHOICE

OrderPart ! Выполнить, если CHOICE() = 1

BEGIN ! Выполнить, если CHOICE() = 2

SavVendor" = Vendor

UpdVendor

IF Vendor <> SavVendor"

Mem:Message = 'VENDOR NAME CHANGED'

END

END

CASE VendorType ! Выполнить, если CHOICE() = 3

OF 1

UpdPartNo1

OF 2

UpdPartNo2

END

RETURN ! Выполнить, если CHOICE() = 4

END ! Конец структуры

EXECUTE SomeValue

DO OneRoutine

DO TwoRoutine

ELSE

MESSAGE('SomeValue did not contain a 1 or 2')

END

Смотри также: BEGIN, CASE, IF

 

IF (структура условного выполнения)

IF логическое выражение [ THEN ]

операторы

[ ELSIF логическое выражение [ THEN ]

операторы ]

[ ELSE

операторы ]

END

IF Начинает структуру условного выполнения операторов.

логическое выражение

Переменная, выражение или процедура. Дальнейшая последовательность выполнения определяется на основе результата вычисления этого логического выражения (истина или ложь). Нуль или пробельное значение рассматриваются как ложь, любое другое значение - как истинное.

THEN Операторы, следующие за THEN выполняются, когда результатом логического выражения в IF является истина. Если присутствует THEN, то он должен находиться на той же строке где находятся IF или ELSIF.

операторы Исполняемый оператор или последовательность таких операторов.

ELSIF Логическое выражение, следующее за ELSIF вычисляется, только когда условия в IF и во всех предшествующих ELSIF оказались ложными.

ELSE Операторы, следующие за ELSE, выполняются, если условия в IF и во всех предшествующих ELSIF оказались ложными. Ветвь ELSE не является обязательной, но когда присутствует, она должна быть последней ветвью в структуре IF.

ГЛАВА 5 УПРАВЛЯЮЩИЕ СТРУКТУРЫ И ОПЕРАТОРЫ 187

Структура IF управляет выполнением программы, основываясь на результате одного или более логических выражений. Она может содержать любое количество групп операторов возглавляемых конструкцией ELSIF. Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры могут быть вложены в структуру IF. Каждая структура IF должна оканчиваться оператором END (или точкой).

Пример:

IF Cus:TransCount = 1 ! Если новый покупатель

AcctSetup ! вызвать процедуру инициализации счета

ELSIF Cus:TransCount > 10 AND Cus:TransCount < 100 ! если постоянный покупатель

DO RegularAcct ! обработать счет

ELSIF Cus:TransCount > 100 ! Если особый покупатель

DO SpecialAcct ! обработать счет

ELSE ! Иначе

DO NewAcct ! обработать счет

IF Cus:Credit

CheckCredit

ELSE

CLEAR(Cus:CreditStat)

END

! проверить состояние счета

END

IF ERRORCODE()

ErrHandler(Cus:AcctNumber,Trn:InvoiceNbr) ! Обработка ошибок

END

Смотри также: EXECUTE, CASE

 

LОOP (структура повторения)

метка LOOP [ | число TIMES | ]

| i = начало TO предел [ BY шаг ] |

| UNTIL логическое выражение |

| WHILE логическое выражение |

операторы

| END |

| UNTIL логическое выражение |

| WHILE логическое выражение |

LОOP Начинает структуру циклического выполнения операторов.

число Числовая константа, переменная или выражение, которая определяет число циклов выполнения операторов в структуре.

TIMES Указывает, что операторы выполняются заданное число раз.

i Метка переменной (счетчика цикла), которая автоматически увеличивается (или уменьшается, если шаг отрицательный) при каждом повторении цикла.

=начало Числовая константа, переменная или выражение, определяющее значение инкрементной переменной (i) при первом вхождении в LOOP-структуру.

TO предел Числовая константа, переменная или выражение, определяющее значение, по которому LOOP завершается. Когда i больше, чем значение предела, (или меньше, если переменная шаг отрицательна), выполнение структуры LOOP завершается. Переменная i содержит последнее значение, большее, чем (или меньшее) значение предела после завершения LOOP. Функции, используемые в выражениях как предел, рассчитываются только один раз (в отличии от UNTIL и WHILE, описанных ниже).

BY шаг Числовая константа, переменная или выражение. Шаг определяет величину приращения (или уменьшения, если значение отрицательное) счетчика при каждом выполнении цикла. Если BY шаг опущен, i увеличивается на 1.

UNТIL Помещенный внутрь структуры LOOP оператор UNTIL означает, что перед каждым выполнением цикла вычисляется логическое выражение. Если же структура LOOP им заканчивается, то логическое выражение вычисляется после каждой итерации. Если его значение есть условие “истина”, то выполнение структуры LOOP прекращается.

WНILЕ Помещенный внутрь структуры LOOP оператор WHILE означает, что перед каждым выполнением цикла вычисляется логическое выражение. Если же структура LOOP им заканчивается, то логическое выражение вычисляется после каждой итерации. Если его значение есть условие “ложь”, то выполнение структуры LOOP прекращается.

логическое выражение

Числовая или строковая переменная, выражение или процедура. Оно имеет своим значением условие. На его основе (истина или ложь) определяется дальнейшая последовательность выполнения программы. Нуль или пробельное значение рассматриваются как ложь, любое другое значение - как истинное.

операторы Исполняемый оператор или последовательность таких операторов.

Структура LOOP предназначена для циклического повторения находящихся в ней операторов. Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры могут быть вложены в структуру LOOP. Структура LOOP должна завершаться оператором END, точкой или операторами UNTIL или WHILE.

Структура LOOP без условий в начале или в конце повторяется непрерывно, до обнаружения оператора ВRЕАК или RETURN. Оператор BREAK прерывает выполнение цикла, и управление передается на оператор, следующий за структурой LOOP. Оператор CYCLE прерывает текущую итерацию, а управление передается на начало цикла, не выполняя операторы, стоящие в теле цикла после CYCLE.

Логические выражения LOOP UNTIL или LOOP WHILE вычисляются в начале структуры LOOP, до исполнения LOOP - операторов. Следовательно, если логическое выражение ложно с самого начала, операторы LOOP не исполнятся ни разу. Чтобы создать LOOP, в котором всегда исполняются операторы (по крайней мере однажды), “предложение” UNTIL или WHILE должно завершать LOOP - структуру.

Пример:

LOOP !Непрерывный цикл

Char = GetChar() ! получить символ

IF Char <> CarrReturn ! если это не “возврат каретки”

Field = CLIP(Field) & Char ! “прицепитьсимвол

ELSE !иначе

BREAK ! выйти из цикла

END !Конец условия

END !Конец цикла

IF ERRORCODE() ! При ошибке

LOOP 3 TIMES ! Повторить 3 раза

BEEP ! дать звуковой сигнал

END !Конец цикла

END !Конец условия

LOOP I# = 1 TO 365 BY 7 ! Повторять, увеличивая I# каждый раз на 7

GET(DailyTotal,I#) ! читать каждую 7-ю запись

DO WeeklyJob

END !I# содержит 372 после завершения цикла

LOOP I# = 10 TO 1 BY -1 !Цикл, уменьшение I# на 1 каждый раз

DO SomeRoutine

END !I# содержит ноль (0) после завершения цикла

SET(MasterFile) ! Встать на первую запись

LOOP UNTIL EOF(MasterFile) ! Обработать все записи

NEXT(MasterFile) ! прочитать запись

ProcMaster ! выполнить процедуру

END

LOOP WHILE KEYBOARD() ! Очистить клавиатурный буфер

ASK !без обработки нажатия клавиш

UNTIL KEYCODE() = EscKey ! но прекратить цикл при нахождении Escape

Смотри также: BREAK, CYCLE

 

Управляющие операторы

BREAK (прервать выполнение цикла)

BREAK [ метка ]

BREAK Передать управление на первый оператор, следующий за прерываемой структурой LOOP или ACCEPT.

метка Метка структуры LOOP или ACCEPT, выполнение которой должно прерваться. Это должна быть метка вложенной структуры, содержащей оператор BREAK.

Оператор ВRЕАК прерывает работу в цикле LOOP или ACCEPT и передает управление первому оператору, следующему за заканчивающим структуру оператором END, WHILE или UNTIL структуры LOOP, или оператором END структуры ACCEPT.

Оператор BREAK можно использовать только в структурах LOOP и ACCEPT. Использование необязательного аргумента метка, позволяет целенаправленно прервать несколько вложенных циклов, исключая тем самым наиболее частый случай применения оператора GOTO.

Пример:

LOOP ! Цикл

ASK ! ждать ввода с клавиатуры

IF KEYCODE() = EscKey ! если нажата клавиша Esc

BREAK ! выйти из цикла

ELSE !иначе

BEEP ! дать звуковой сигнал

END

END

Loop1 LOOP ! Loop1 это метка

DO ParentProcess

Loop2 LOOP ! Loop2 это метка

DO ChildProcess

IF SomeCondition

BREAK Loop1 ! Прервать оба вложенных цикла

END

END

END

ACCEPT ! Цикл ACCEPT

CASE ACCEPTED()

OF ?Ok

CallSomeProc

OF ?Cancel

BREAK ! выйти из цикла

END

END

Смотри также: LOOP, CYCLE, ACCEPT

 

CYCLE (переход в начало цикла)

CYCLE [ метка ]

CYCLE Передать управление на начало цикла LOOP или цикла ACCEPT.

метка Метка оператора LOOP или ACCEPT на который передать управление. Это должна быть метка вложенной структуры LOOP или ACCEPT, содержащей оператор CYCLE.

Оператор СYСLЕ передает управление в начало цикла. Оператор СYСLЕ может использоваться только в структурах LООР или ACCEPT. Использование необязательной метки позволяет целенаправленно передать управление на один из вложенных циклов, исключая тем самым один наиболее частых случаев применения оператора GOTO.

В цикле ACCEPT для некоторых событий оператор CYCLE прерывает автоматически выполняемые действия до начала их выполнения. Такое его поведение описано для каждого события, к которому это относится:

Event:Iconize

Event:Maximize

Event:Move

Event:PreAlertKey

Event:Restore

Event:Size

Event:Contracting

Event:Expanding

EVENT:CloseDown

EVENT:CloseWindow

EVENT:DDEPoke

EVENT:DDEExecute

Пример:

SET(MasterFile) ! Встать на первую запись

LOOP ! Цикл по всем записям

NEXT(MasterFile) ! Читать следующую запись

IF ERRORCODE() THEN BREAK. !Выйти из цикла по концу файла

DO MatchMaster ! проверить соответствие

IF NoMatch ! если не соответствует

CYCLE ! на начало цикла

END

DO TransVal ! проверить транзакцию

PUT(MasterFile) ! занести запись

END

Loop1 LOOP ! Loop1 - это метка

DO ParentProcess

Loop2 LOOP ! Loop2 - это метка

DO ChildProcess

IF SomeCondition

CYCLE Loop1 ! Перейти на начало внешнего цикла

END

END

END

Смотри также: LOOP, CYCLE, ACCEPT

 

DO (выполнить локальную подпрограмму)

DO метка

DO Выполняет локальную подпрограмму.

метка Метка оператора ROUTINE.

Оператор используется для выполнения подпрограммы локальной по отношению к программе или процедуре. Когда выполнение локальной подпрограммы завершено, управление передается оператору, непосредственно следующему за оператором DО, вызвавшим подпрограмму. Локальная подпрограмма может вызываться только внутри содержащей ее программной секции.

Пример:

DO NextRecord ! Вызвать подпрограмму чтения следующей записи

DO CalcNetPay ! Вызвать подпрограмму CalcNetPay

Смотри также: EXIT, ROUTINE

 

EXIT (прекратить выполнение локальной подпрограммы)

EXIT

Оператор EXIT прекращает выполнение локальной подпрограммы и возвращает управление оператору, следующему за оператором DО, который вызвал данную подпрограмму. EXIT отличается от RETURN тем, что RETURN полностью выходит из процедуры, даже если был вызван из подпрограммы.

EXIT необязательный оператор в локальной подпрограмме. Подпрограмма без оператора EXIT автоматически заканчивается после выполнения последнего исполняемого оператора в ней.

Пример:

CalcNetPay ROUTINE

IF GrossPay = 0 ! Если оплаты нет

EXIT ! выйти из подпрограммы

END

NetPay = GrossPay - FedTax - Fica

QtdNetPay += NetPay

YtdNetPay += NetPay

Смотри также: DO, RETURN

 

GOTO (безусловный переход)

GOTO метка

GOTO Безусловная передача управления на другой оператор программы.

метка Метка другого исполняемого оператора в программе, процедуре или локальной подпрограмме.

Оператор GОТО безусловно передает управление от одного оператора к другому. Метка перехода в этом операторе не должна быть меткой оператора ROUTINE, PROCEDURE.

Область действия оператора GOTO ограничивается данной локальной подпрограммой или процедурой; он не может передать управление за пределы локальной подпрограммы или процедуры, в которой он используется.

Широкое использование GOTO обычно не считается хорошим стилем программирования. LOOP обычно является лучшей альтернативой.

Пример:

ComputeIt PROCEDURE(Level)

CODE

IF Level = 0

GOTO PassCompute ! Пропустить вычисления, если Level=0

END

Rate = Level * MarkUp ! Вычислить Rate

RETURN(Rate) ! и возвратить его

PassCompute RETURN(999999) ! Возврат полученного числа

Смотри также: LOOP

 

RETURN (возврат в точку вызова)

RETURN( [выражение] )

RETURN Заканчивает программу или процедуру.

выражение Обрабатывает возвращаемое значение PROCEDURE, прототипированной для возврата значения выражению, в котором PROCEDURE была использована. Это может быть NULL, если процедура возвращает указатель.

Оператор RЕТURN завершает выполнение программы или процедуры и передает управление в точку вызова. Когда этот оператор выполняется в секции исполняемых операторов программного модуля, то все файлы закрываются, программа завершается, а управление передается операционной системе.

Оператор RЕТURN требуется в процедуре, которая должна возвращать значение и необязателен в программе или процедуре, которая не возвращает значения. Если в процедуре или программе не используется оператор RETURN, то его неявное выполнение происходит вслед за последним исполняемым оператором. Конец секции исполняемых операторов определяется по концу исходного файла или началу другой процедуры или локальной подпрограммы.

При выходе из процедуры (явном или неявном) автоматически закрывает любые локальные структуры APPLICATION, WINDOW, REPORT или VIEW, открытые в данной процедуре. Но при этом не закрываются глобальные данные или структуры APPLICATION, WINDOW, REPORT или VIEW, описанные в секции данных модуля без атрибута STATIC. Кроме того, при этом освобождаются любые локальные структуры QUEUE, объявленные без атрибута STATIC.

Выражение в круглых скобках – это выражение допустимое с точки зрения синтаксиса. Если в круглые скобки заключена переменная, то выражение разыменовывается значением этой переменной и преобразуется в один из базовых типов. Относительно использования скобок с RETURN, если функция имеет тип возвращаемой переменной, возвращаемая переменная использованная в операторе RETURN не должна заключаться в круглые скобки.

Пример:

IF Done#

RETURN ! Выйти по завершении

END

DayOfWeek PROCEDURE(Date) ! Процедура, возвращающая день недели

RetVal STRING(9)

CODE

EXECUTE Date % 7 !Определение дня недели

RetVal = 'Monday'

RetVal = 'Tuesday'

RetVal = 'Wednesday'

RetVal = 'Thursday'

RetVal = 'Friday'

RetVal = 'Saturday'

ELSE

RetVal = 'Sunday'

END

RETURN RetVal !и возврат строки с вычисленным днем

Смотри также: PROCEDURE, Типы значений, возвращаемые процедурами

к оглавлению

Знаете ли Вы, что декомпозиция программы - это создание модулей, которые в свою очередь представляют собой небольшие программы, взаимодействующие друг с другом по хорошо определенным и простым правилам.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution