Выражение - это математическая, строковая или логическая формула, по которой вычисляется значение. Выражение может стоять справа от знака равенства в операторах присваивания, быть параметром процедуры, индексом массива переменных (размерная переменная) или условием в структурах IF, САSЕ, LООР или ЕXЕСUТЕ. Выражения состоят из констант, переменных и процедур которые возвращают значение, связанных символами логических
и/или арифметических или строковых операций.
Выражения вычисляются в стандартном алгебраическом порядке операций. Старшинство операций определяется типом операции и скобками. Каждая операция вырабатывает промежуточное (внутреннее) значение, которое затем используется в последующих операциях. Скобки используются для того, чтобы группировать операции в выражении. Выражение вычисляется, начиная с подвыражения в самых вложенных скобках, последовательно к самому внешнему уровню.
Уровни старшинства операций в выражениях от наивысшего к наинизшему и слева направо в каждом уровне:
Уровень 1 () Группировка скобками
Уровень 2 - Унарный минус
Уровень 3 обращение к процедуре Получение возвращаемого значения
Уровень 4 ^ Возведение в степень
Уровень 5 * / % Умножение, деление, деление по модулю
Уровень 6 + - Сложение, вычитание
Уровень 7 & Конкатенация (объединение)
Уровень 8 = <> Логическое сравнение
Уровень 9 AND, NOT, OR Булевы выражения
Результатом выражения может быть числовое, строковое или логическое (истина/ложь) значение. Выражение может вообще не содержать операций, это может быть просто переменная, константа или обращение к процедуре, которая возвращает значение.
Символ арифметической операции объединяет два операнда в арифметическое выражение для вычисления результата. Знаки операций:
+ сложение (A + B означает A плюс B).
- вычитание (A - B означает A минус B)
* умножение (A * B означает A умножить на B)
/ деление (A / B означает A разделить на B)
^ возведение в степень (A ^ B означает A возвести в степень B)
% остаток от деления (А % В означает остаток от деления А на В)
Замечание:
Знак результата Деления Модуля может управляться определением compatible_modulus #PRAGMA. Смотри: SoftVelocity #PRAGMAS.
Существует также “сокращенный” арифметический оператор назначений, который упрощает ваш код. Для подробной информации смотри:
Вычисляющие операторы присваивания
Операция конкатенации (&) используется для того, чтобы присоединить одну строку или строковую переменную к другой. Длина результата равна сумме длин соединяемых строк. Могут соединяться и числовые константы или переменные со строкой или с другой числовой константой или переменной. Для того, чтобы удалить ненужные пробелы в конце соединяемых строк, используется процедура CLIP.
Пример
:CLIP(FirstName) & ' ' & Initial & '. ' & LastName !
Составить полное имя'SoftVelocity Corporation' & ', Inc.' !
Соединить две константыСмотри также:
CLIP, Числовые выражения, Правила преобразования данных, FORMAT
Логическая операция проверяет два операнда или выражения и вырабатывает условие “истина” или “ложь”. Существует два вида логических операций: условные и булевы. В условных операциях сравниваются два значения или выражения. Символы булевых операций соединяют строковые, числовые или логические выражения, реализуя булеву алгебру. Символы булевых операций могут комбинироваться, образуя составные операции.
Условные операции
= равно< меньше
> больше
Булевы операции
NOT булево (логическое) отрицание (НЕ)~ логическое НЕ
AND конъюнкция (булево И)
OR дизъюнкция (булево ИЛИ)
XOR исключающее ИЛИ
Комбинированные операции
<> не равно~= не равно
NOT =
не равно<= меньше или равно
=< меньше или равно
~> не больше
NOT > не больше
>= больше или равно
=> больше или равно
~< не меньше
NOT < не меньше
Во время логических вычислений любая ненулевая величина и непустая строка означает условие “истина”, а пустая строка или нулевая величина - условие “ложь”.
ГЛАВА 4Пример:
Логическое выражение
РезультатA = B Истина, если A = B
A < B Истина, если A меньше B
A > B Истина, если A больше B
A <> B, A ~= B, A NOT= B Истина, если A не равно B
A ~<
B, A >= B, A NOT< B Истина, если A не меньше BA ~> B, A <= B, A NOT> B Истина, если A не больше B
~A, NOT A Истина, если A нуль или пустая строка
A AND B Истина, если A истинно и B истинно
A OR B Истина, если или A истинно, или B истинно, либо оба истинны
A XOR B Истина, если или A истинно, или B истинно, но не оба одновременно
Числовые константы
Числовые константы представляют собой постоянные числовые значения. Константы могут встречаться в объявлении данных, выражениях, в качестве параметров процедур или атрибутов. Числовая константа может представляться в десятичном (по основанию 10 - по умолчанию), двоичном (по основанию 2), восьмеричном (по основанию 8), шестнадцатеричном (по основанию 16) и экспоненциальном форматах. В числовых константах недопустимы символы форматирования, такие как знак доллара или запятая; лидирующие знаки "плюс" или "минус" допустимы.
Десятичные (по основанию 10) числовые константы могут иметь впереди минус (как признак отрицательного числа), целую часть и необязательные десятичную точку с дробной частью числа. Двоичные (по основанию 2) числовые константы могут содержать необязательный знак минус спереди, символы цифр 0 и 1 и символ B или b (латинские) в конце. Восьмеричные числовые константы (по основанию 8) могут содержать необязательный знак минус спереди, символы цифр от 0 до 7 и символ O или o (латинские) в конце. Шестнадцатеричные (по основанию 16) числовые константы могут содержать необязательный знак минус спереди, символы цифр от 0 до 9, латинские буквы от A до F (представляющие циффры от 10 до 15) и символ H или h (латинские) в конце. Если первой значащей цифрой (самым левым символом) в шестнадцатеричной константе является цифра от A до F, то перед ней надо поставить незначащий ноль.
Пример:
-924 !
Десятичные константы76.346
+76.346
1011b !
Двоичные константы-1000110B
3403o !
Восьмеричные константы-7041312O
-1FFBh !
Шестнадцатеричные константы0CD1F74FH
Строковые константы представляют собой строку символов, заключенную в одинарные кавычки (апострофы). Максимальная длина строковой константы равна 255-ти символам. Символы, которые нельзя ввести с клавиатуры, можно вставить в строку, заключая в угловые скобки (< >) их коды ASCII. Коды ASCII могут представляться десятичными или шестнадцатеричными числовыми константами.
Появление в строковой константе левой угловой скобки (<) подразумевает наличие соответствующей правой скобки. Поэтому для того, чтобы включить в строку символ угловой скобки, его необходимо ввести подряд дважды. Аналогично нужно ввести два апострофа подряд, чтобы в строку был включен апостроф. Константа, состоящая всего из двух апострофов (или с пробелами между ними) представляет пустую строку). Последовательное повторение одного и того же символа в строке может указываться коэффициентом повторения. Коэффициент повторения указывается в фигурных скобках { } следом за символом, который должен повторяться. Для того, чтобы включить левую фигурную скобку ({) в качестве части строковой константы, требуется ввести две левые фигурные скобки подряд ({{).
Амперсанд (&) всегда имеет значение в символьных константах. Однако, в зависимости от места, он может интерпретироваться как подчеркивание для горячей клавиши (например для объекта
PROMPT) .В таком случае вы должны выделить начало и конец действия амперсанда набором двойного амперсанда (&&).Пример
:'string constant' !
Строковая константа'It''s a girl!' !
Вложенный апостроф'<27,15>' !
Десятичные коды ASCII'A << B
' ! Добавление левой угловой скобки, A < B'*{20}' !
Двадцать звездочек, запись с коэффициентом повторения'' !
Пустая строка
Числовые выражения могут использоваться в качестве параметров процедур, как условие в структурах IF, САSЕ, LООР или ЕXЕСUТЕ, а также в правой части операторов присваивания, в которых слева стоит числовая переменная. Числовые выражения могут содержать операцию конкатенации, но в них не должно быть никаких логических операций. Использованные в
числовом выражении строковые константы и переменные преобразуются в промежуточное числовое значение. Если в выражении используется операция конкатенации, то она выполняется над строковыми промежуточными значениями, а результат преобразуется в число.Пример:
Count + 1 !
Добавить 1 к переменной Count(1 - N * N) / R !
Вычесть из 1 произведение N на N затем разделить на R305 & 7854555 !
Соединить код региона с номером телефонаСмотри также:
Правила преобразования данных
Строковые выражения могут использоваться в качестве параметров процедур или атрибутов, либо в правой части операторов присваивания, если в левой части стоит строковая переменная. Строковым выражением может быть отдельная строка или числовая переменная, или сложное сочетание подвыражений, процедур и операций.
Пример
:StringVar STRING(30)
Name STRING(10)
Weight STRING(3)
Phone LONG
CODE
!
Конкатенация константы и переменнойStringVar = 'Address:' & Cus:Address
! Конкатенация констант и значения, возвращаемого функцией FORMAT
StringVar = 'Phone:' & ' 305-' & FORMAT(Phone,@P###-####P)
! Конкатенация константы и переменной
StringVar = Weight & 'lbs.'
Смотри также:
CLIP, Конкатенация, Правила преобразования данных, FORMAT
В логических выражениях в управляющих структурах IF, LОOP UNTIL и LОOP WHILE происходит оценка логических условий “истина/ложь”. На основе окончательного результата выражения (истина или ложь) определяется дальнейшая последовательность выполнения программы. Логические выражения оцениваются слева направо. Правый операнд в операциях AND, OR или XOR оценивается только в том случае, когда он может повлиять на результат. Для того, чтобы избежать неоднозначности и управлять последовательностью оценки операндов, следует использовать скобки. Уровни старшинства логических операций:
Уровень 1 условные операции
Уровень 2 ~,
NOTУровень 3
ANDУровень
4 OR, XORПример
:LOOP UNTIL KEYBOARD() !
Истинно, когда пользователь нажимает клавишу!
операторыEND
IF A = B THEN RETURN. !
Выйти, если A = B.LOOP WHILE ~ Done# !
Цикл пока “ложь” (DONE# = 0)!
операторыEND
IF A >= B OR (C > B AND E = D) THEN RETURN.
!Истина если
a >= b, также истина если!и
c > b и e = d.!Вторая часть выражения
!(после
OR) вычисляется только если!первая часть не истина.
[
цель] [$] [объект] { свойство [,элемент] }цель
Метка структуры APPLICATION, WINDOW, REPORT, VIEW или FILE, метка BLOB, одна из встроенных переменных: TARGET, PRINTER или SYSTEM. Если опущено, принимается TARGET.$
Обязательный разделитель, когда указаны и цель и объект. Опускается, если или цель или объект опущен.объект Номер поля или метка соответствия поля на которую воздействует структура цели
(APPLICATION, WINDOW или REPORT). Если объект опущен, должен быть указан параметр цель. Объект должен быть опущен, если в качестве цели указан FILE, BLOB или встроенные переменные PRINTER или SYSTEM.свойство
Численная константа, метка соответствия или переменная, которая указывает какое свойство (атрибут) изменяется. Это может быть строка указывающая на свойство OCX или OLE контейнера.элемент Числовая константа или переменная указывающая, какой элемент изменяется (для свойств в массиве).
Синтаксис выражения свойств позволяет получить доступ ко всем атрибутам (свойствам) структур
APPLICATION, WINDOW или REPORT, или к любому объекту внутри этих структур. Чтобы указать атрибут структуры APPLICATION, WINDOW, REPORT, VIEW или FILE ( а не их компонента), опустите параметр объект в выражении свойства. Чтобы указать объект в текущем окне, опустите параметр цель в выражении свойства.Структуры данных
REPORT по умолчанию никогда не выступают в качестве цели. Поэтому, чтобы изменить какое-либо свойство в этой структуре надо: либо использовать SETTARGET указывая в качестве цели REPORT, либо явно указывать метку структуры REPORT как цель перед изменением любого свойства структуры или объекта, который он содержит.Выражения свойств могут применяться в операторах языка
Clarion в любом месте, где это допустимо, или как источник или назначение в простых операторах присваивания. Они не могут использоваться в таких операциях присваивания как +=, *= и т.д. Присвоение нового значения свойству происходит путем использования простого оператора присваивания, когда свойство выступает в качестве назначения, а новое значение в качестве источника. Определение текущего значения свойства происходит путем простого присваивания, когда свойство выступает в качестве источника, а получаемое значение в качестве назначения. Выражение свойства может также использоваться как исполняемый оператор (без операции присваивания) когда выражение свойства является методом вызова для объектов OLE или OCX.В процессе исполнения все свойства трактуются как символьные данные; компилятор автоматически выполняет любые возможные конвертации типов данных. Любое свойство без параметров является двоичным (переключаемым). Двоичные свойства либо “присутствуют” либо “опущены” и возвращают ‘1’, если присутствуют и ‘’ (
null), если опущены. Изменение двоичного свойства в ‘’ (null), ‘0’ или любую нечисловую строку считается “опущенным”. Изменение в любое другое значение, считается “присутствующим”.Большинство свойств могут быть как проверяемыми (читаемыми) либо изменяемыми (записываемыми). Однако некоторые свойства могут быть “только для чтения” и не могут быть изменены. Присвоение такому свойству значения никак на него не повлияет. Другие свойства являются “только для записи” и при прочтении не имеют смысла. Некоторые свойства являются массивами и включают в себя множественные значения. Для адресации к соответвующим элементам массива свойства в синтаксисе используются запятые (а не угловые скобки) в качестве разделителей между свойствами и номерами элементов.
Встроенные переменные
В библиотеке исполняемой системы Clarion for Windows есть три встроенные переменные: TARGET, PRINTER и SYSTEM. Они используются в синтаксических конструкциях присвоения значений свойствам только для идентификации свойства, которому присваивается значение
.TARGET обычно указывает окно, которое в данный момент имеет фокус ввода. К тому же, оно может указывать на окно в другом исполняемом процессе или на печатаемый в данный момент документ, позволяя изменять значения свойств объектов окна в другом исполняемом процессе, или динамически изменять объекты документа при печати. Для изменения значения переменной TARGET используется процедура SETTARGET и
SYSTEM {PROP:Target}.PRINTER ссылается только на свойства относящиеся к принтеру, используемые следующим открываемым документом (и всеми последующими отчетами).
SYSTEM представляет собой встроенную переменную, которая указывает глобальные свойства, используемые всем приложением вцелом. Существует несколько особых необявляемых свойств, которые использует переменную SYSTEM для установки или опроса глобальных относительно приложения свойств.
Пример
:MainWin APPLICATION('My Application'),SYSTEM,MAX,ICON('MyIcon.ICO'),STATUS,RESIZE
MENUBAR
MENU('File'),USE(?FileMenu)
ITEM('Open...'),USE(?OpenFile)
ITEM('Close'),USE(?CloseFile),DISABLE
ITEM('E&xit'),USE(?MainExit)
END
MENU('Help'),USE(?HelpMenu)
ITEM('Contents'),USE(?HelpContents),STD(STD:HelpIndex)
ITEM('Search for Help On...'),USE(?HelpSearch),STD(STD:HelpSearch)
ITEM('How to Use Help'),USE(?HelpOnHelp),STD(STD:HelpOnHelp)
ITEM('About MyApp...'),USE(?HelpAbout)
END
END
TOOLBAR
BUTTON('Open'),USE(?OpenButton),ICON(ICON:Open)
END
END
CODE
OPEN(MainWin)
MainWin{PROP:Text} = 'A New Title' !
Изменить заголовок окна?OpenButton{PROP:ICON} = ICON:Asterisk !
Изменить иконку кнопки?OpenButton{PROP:AT,1} = 5 !
Изменить абсциссу кнопки?OpenButton{PROP:AT,2} = 5 !
Изменить ординату кнопкиIF MainWin$?HelpContents{PROP:STD} <> STD:HelpIndex
MainWin$?HelpContents{PROP:STD} = STD:HelpIndex
END
MainWin{PROP:MAXIMIZE} = 1 !
Расширить в полный экранACCEPT
CASE ACCEPTED() !
какой объект выбран?OF ?OpenFile
!Открыть... выбор менюOROF ?OpenButton
!Кнопка открытия на панеле инструментовSTART(OpenFileProc)
!Начать новый исполняемый процессOF ?MainExit
!Выход из меню выбораOROF ?MainExitButton
!Кнопка выхода на панеле инструментовBREAK
!Прервать цикл ACCEPTOF ?HelpAbout
!О программе... выбор менюHelpAboutProc
!Вызвать процедуру информации о приложенииEND
END
CLOSE(MainWin) !
Закрыть приложениеRETURN
Смотри также:
SETTARGET, Динамические свойства
Вычисление динамических выражений
В Clarion есть возможность вычисления выражений на языке Clarion, динамически создаваемых во время выполнения. То есть в Clarion-программе возможно создание выражений “на ходу”. Также возможно позволить пользователю ввести выражение для вычисления.
Выражение представляет собой математическую или логическую формулу, в результате вычисления которой получается значение. Оно не является законченным оператором языка Clarion. Выражение может содержать только константы, переменные или обращения к процедурам, которые возвращают значение, соединенные символами логических и/или арифметических
операций. Выражение может использоваться в правой части оператора присваивания, в качестве параметра процедуры, в качестве индекса массива ( размерные переменные) или в качестве условий в структурах IF, CASE, LOOP или EXECUTE.В качестве компонент строки динамического выражения можно использовать любые переменные Clarion-программы и большинство встроенных функций. Кроме того, в строке динамического выражения можно использовать написанные пользователем функции, которые отвечают конкретным определенным правилам, описанным в разделе, посвященном оператору BIND.
Во время выполнения программы в строке динамического выражения можно использовать все стандартные синтаксические правила конструирования выражений. Включая ггруппировку скобками и все арифметические и логические операции и операции над строками. Динамические выражения вычисляются точно так же как любые другие выражения в языке Clarion и к ним применимы все стандартные правила старшинства операций, описанные в разделе Вычисление выражений (см. стр. 3).
Создание строки динамического выражения предполагает три этапа:
Как только выражение вычислено, его результат используется как если бы он был получен любым написанным вручную в программе выражением. Например, строка динамического выражения могла бы представлять фильтрующее выражение для исключения отдельных записей при просмотре или печати базы данных (выражение FILTER структуры VIEW подразумевает строку динамического выражения).
Смотри
также: BIND, EVALUATE, POPBIND, PUSHBIND, UNBIND
BIND (объявить переменную для динамического выражения)
BIND(
| имя,переменная | )|
имя,процедура ||
группа |BIND
Идентифицирует переменные, которые могут использоваться в динамических выражениях.имя Строковая константа, содержащая идентификатор, используемый в динамическом выражении. Может совпадать с меткой переменной или процедуры
.переменная
Метка любой переменной (включая поля в структурах FILE, GROUP и QUEUE) или передаваемого параметра. Если это массив, то только одномерный.процедура Метка оператора PROCEDURE языка Clarion, которая возвращает значение типа STRING, REAL или LONG. Если процедуре передается параметры, то они должны быть строковыми параметрами-значениями (передаваемыми значением, а не адресом) и не могут быть опущены.
группа
Метка структуры GROUP, RECORD или QUEUE, объявленной с атрибутом BINDABLE.Оператор
BIND объявляет логическое имя, используемое для идентификации в строке динамического выражения переменной или написанной пользователем процедуры. До того, как переменную или пользовательскую процедуру можно было использовать в строке динамического выражения в процедуре EVALUATE или в атрибуте FILTER структуры VIEW, ее нужно идентифицировать с помощью оператора BIND.BIND (
Указанное имя используется в выражении в качестве метки переменной
.BIND(
имя,процедура)Указанное имя используется в выражении в качестве метки процедуры
.BIND(
группа)Объявляет, что все переменные в данной структуре GROUP, RECORD или QUEUE (с атрибутом BINDABLE) можно использовать в динамическом выражении. В качестве логического имени в динамическом выражении используется значение атрибута NAME. Если атрибут NAME отсутствует, то используется имя переменной с префиксом.
Для структур GROUP,
RECORD или QUEUE, объявленных с атрибутом BINDABLE, в исполняемом модуле для имен всех элементов данных этих структур дополнительно выделяется память. Таким образом программа становится больше и использует больше памяти чем обычно. Кроме того, большое число переменных, которые можно использовать в динамических выражениях, замедляет работу процедуры EVALUATE. Поэтому форму BIND(группа) следует использовать, только если большая часть переменных, составляющих структуру, используется в динамических выражениях.Пример
:PROGRAM
MAP
AllCapsFunc(STRING),STRING !
Процедура на языке ClarionEND
Header FILE,DRIVER('Clarion'),PRE(Hea),BINDABLE !
Объявление структуры файлаOrderKey KEY(Hea:OrderNumber)
Record RECORD
OrderNumber LONG
ShipToName STRING(20)
END
END
StringVar STRING(20)
CODE
BIND('ShipName',Hea:ShipToName)
BIND('SomeFunc',AllCapsFunc)
BIND('StringVar',StringVar)
StringVar = 'SMITH'
CASE EVALUATE('StringVar = SomeFunc(ShipName)')
OF ''
IF ERRORCODE()
MESSAGE('Error ' & ERRORCODE() & ' -- ' & ERROR())
ELSE
MESSAGE('Unkown error evaluating expression')
END
OF '0'
DO NonSmithProcess
OF '1'
DO SmithProcess
END
AllCapsFunc PROCEDURE(PassedString)
CODE
RETURN(UPPER(PassedString))
Смотри
также: UNBIND, BINDEXPRESSION, EVALUATE, PUSHBIND, POPBIND, FILTER(объявляет динамическое выражение)
BINDEXPRESSION(
| имя,выражение | )BINDEXPRESSION
Указывает переменную используемую в динамическом выражении.имя Строковая константа включающая идентификатор, используемый в динамическом выражении.
выражение Математическая формула, включающая допустимую комбинацию переменных, функций операторов и констант.
Оператор
BINDEXPRESSION объявляет логическое имя идентификатора, используемого для идентификации динамически используемого строкового выражения.Оператор
EVALUATE должен выполнить грамматический разбор выражения каждый раз, когда вызывается. Если какое-то выражение вычисляется часто, то это вызовет задержку во времени. Если некоторые выражение оценивается часто, это может затрачивать много времени.BINDEXPRESSION выполняет грамматический разбор выражение только однажды и результат будет сохранен под именем ранее вычисленного выражения. Позже, это выражение может быть использовано в
EVALUATE как одиночное, или как часть другого выражения в EVALUATE, или в другом BINDEXPRESSION.Пример
:BIND('Var', Var)
BINDEXPRESSION('Power2', 'Var * Var')
...
Var = 10
P2 = EVALUATE ('Power2')
...
BINDEXPRESSION ('Circle', '3.14159 * Power2')
BINDEXPRESSION('color:red',color:red)
MESSAGE('color:red = ' & color:red & '|Eval(color:red)=' &|
evaluate('color:red') )
!показывает тот же номер дваждыBINDEXPRESSION('Match:Soundex',Match:Soundex)
FILTER('MATCH(Cus:Name,NameWanted,Match:Soundex)')
Смотри также:
BIND, EVALUATE
EVALUATE (получить результат динамичекого выражения)
EVALUATE(
выражение)EVALUATE
Вычислить динамическое выражение.выражение Строковая константа или переменная содержащая выражение для вычисления.
Процедура
EVALUATE возвращает результат вычисления динамического выражения в виде значения типа STRING. Если выражение синтаксически не верно с точки зрения языка Clarion, то возвращается пустая строка, а процедура ERRORCODE возвращает код ошибки. Логическое выражение возвращает строку, содержащую или ноль ('0') или один ('1'), тогда как арифметическое выражение возвращает фактический результат выражения (в строке). Большое число переменных, связанных с логическими именами для использования в динамических выражениях, замедляет работу процедуры EVALUATE. Поэтому форму BIND(группа) следует использовать, только если большая часть переменных, составляющих структуру, действительно используется в динамических выражениях. А все неиспользуемые в данный момент в динамических выражениях переменные и пользовательские функции следует освободить оператором UNBIND. Теперь во время работы программы и в шаблонах в выражениях, вычисляемых оператором EVALUATE могут быть использованы операторы PATH(), SHORTPATH() и LONGPATH().Синтаксис уточнения имени полей (точечный синтаксис) не может использоваться в выражениях. Переменные не могут связываться оператором
BIND используя стандартные правила префиксов.Возвращаемый тип данных:
STRINGСообщения об ошибках:
1010 –
Неверное выражение1011
– Переменная не найдена1012 – Несовпадение
1015 – Некоторые параметры встроенных функций, используемых в выражении, опущены
Смотри также
: POPBINDПример:
MAP
AllCapsFunc PROCEDURE(STRING),STRING !
Процедура на языке ClarionEND
Header FILE,DRIVER('Clarion'),PRE(Hea),BINDABLE !
Объявление структуры файлаOrderKey KEY(Hea:OrderNumber)
Record RECORD
OrderNumber LONG
ShipToName STRING(20)
END
END
StringVar STRING(20)
CODE
BIND('ShipName',Hea:ShipToName)
BIND('SomeFunc',AllCapsFunc)
BIND('StringVar',StringVar)
StringVar = 'SMITH'
CASE EVALUATE('StringVar = SomeFunc(ShipName)')
OF ''
IF ERRORCODE()
MESSAGE('Error ' & ERRORCODE() & ' -- ' & ERROR())
END
OF '0'
DO NonSmithProcess
OF '1'
DO SmithProcess
END
AllCapsFunc PROCEDURE(PassedString)
CODE
RETURN(UPPER(PassedString))
Смотри
также: BIND, UNBIND, PUSHBIND, POPBIND, FILTER
POPBIND (восстановить пространство имен динамических выражений)
POPBIND
Оператор
POPBIND восстанавливает пространство имен предыдущего оператора BIND для ранее использованных в динамических выражениях процедур и переменных. Таким образом восстанавливаются рамки предыдущих операторов BIND.Пример:
SomeProc PROCEDURE
OrderNumber LONG
Item LONG
Quantity SHORT
CODE
BIND('OrderNumber',OrderNumber)
BIND('Item',Item)
BIND('Quantity',Quantity)
AnotherProc !
Обратиться к другой процедуреUNBIND('OrderNumber',OrderNumber)
UNBIND('Item',Item)
UNBIND('Quantity',Quantity)
AnotherProc PROCEDURE
OrderNumber LONG
Item LONG
Quantity SHORT
CODE
PUSHBIND !
Создать новое пространство имен для BINDBIND('OrderNumber',OrderNumber) !
Указать перем-е с теми же именами в новом пространствеBIND('Item',Item)
BIND('Quantity',Quantity)
!Do some Processing
UNBIND('OrderNumber')
UNBIND('Item')
UNBIND('Quantity')
POPBIND !
Восстановить старое пространство имен для BINDСмотри также:
PUSHBIND, EVALUATE
PUSHBIND (очистить пространство имен динамических выражений)
PUSHBIND(
[ флаг ] )PUSHBIND
Создает новые границы для подмножества операторов BIND.флаг Целая константа или переменная, содержащая ноль (0) или единицу (1). Если значение равно 0, пространство имен оператора
BIND очищается для всех переменных и процедур, ранее определенных. Если единице - все переменные и процедуры предварительно ограничиваются. Если значение опущено - флаг устанавливается в ноль.Оператор
PUSHBIND создает новые границы для подмножества операторов BIND. Эти границы устанавливаюся с последующим оператором POPBIND. Эти новые BIND-имена для тех же самых переменных (с тем же именем) не конфликтуют с использованием этих имен в предыдущем пространстве имен.Пример
:SomeProc PROCEDURE
OrderNumber LONG
Item LONG
Quantity SHORT
CODE
BIND('OrderNumber',OrderNumber)
BIND('Item',Item)
BIND('Quantity',Quantity)
AnotherProc !
Обратиться к другой процедуреUNBIND('OrderNumber',OrderNumber)
UNBIND('Item',Item)
UNBIND('Quantity',Quantity)
AnotherProc PROCEDURE
OrderNumber LONG
Item LONG
Quantity SHORT
CODE
PUSHBIND !
Создать новое пространство имен для BINDBIND('OrderNumber',OrderNumber) !
Указать Bind-переменные в новой областиBIND('Item',Item)
BIND('Quantity',Quantity)
!Do some Processing
UNBIND('OrderNumber')
UNBIND('Item')
UNBIND('Quantity')
POPBIND !
Восстановить предыдущее пространство имен для BINDСмотри также:
POPBIND, EVALUATE
UNBIND (освободить логическое имя)
UNBIND(
[имя] )UNBIND
Освобождает переменные от использования в динамических выражениях.имя Строковая константа, которая указывает идентификатор использованный вычислителем динамических выражений. Если параметр опущен, то все переменные, использовавшиеся в динамических выражениях, освобождаются.
Оператор
UNBIND освобождает логические имена, ранее связанные с переменными оператором BIND. Большое число переменных, которые можно использовать в динамических выражениях, замедляет работу процедуры EVALUATE. Поэтому все неиспользуемые в данный момент в динамических выражениях переменные и пользовательские функции следует освободить оператором UNBIND.Пример
:PROGRAM
MAP
AllCapsFunc(STRING),STRING !
Пользовательская процедура на ClarionEND
Header FILE,DRIVER('Clarion'),PRE(Hea) !
Объявить структуру файла заголовковAcctKey KEY(Hea:AcctNumber)
OrderKey KEY(Hea:OrderNumber)
Record RECORD
AcctNumber LONG
OrderNumber LONG
ShipToName STRING(20)
ShipToAddr STRING(20)
ShipToCity STRING(20)
ShipToState STRING(20)
ShipToZip STRING(20)
END
END
Detail FILE,DRIVER('Clarion'),PRE(Dtl),BINDABLE ! RECORD,
используемая в динамич.выраженияхOrderKey KEY(Dtl:OrderNumber)
Record RECORD
OrderNumber LONG
Item LONG
Quantity SHORT
END
END
CODE
BIND('ShipName',Hea:ShipToName)
BIND(Dtl:Record)
BIND('SomeFunc',AllCapsFunc)
UNBIND('ShipName') !
Освободить переменнуюUNBIND('SomeFunc') !
Освободить пользовательскую процедуру на ClarionUNBIND !
Освободить все переменныеAllCapsFunc PROCEDURE(PassedString)
CODE
RETURN(UPPER(PassedString))
Смотри
также: BIND, EVALUATE, PUSHBIND, POPBIND