Выражения в Microsoft Visual FoxPro
« Назад Выражение – это формула, содержащая 1 или более операндов, объединенных знаками операций. Операции выражения выполняются слева направо в порядке их приоритета. Части выражения, заключенные в круглые скобки, выполняются в первую очередь. Тип выражения определяется типом результата выражения. Примеры. Выражения присутствуют в правой части оператора присваивания. x = 2 y = Sin(x) y = x * Sin(x) x = (a + b) / (c + d) flag = (x > y) and Empty(z) && или: x > y and Empty(z) Части выражения, если их нужно записать на разных строках, разделяются точкой с запятой, например: flag = (x > y) ; Логические выражения вычисляются не полностью, если на определенном этапе становится ясен их результат. Так, в программе x = 2 y = 3 flag = x > y and SomeFunc(x) function SomeFunc(x) ? x return .T. endFunc функция SomeFunc( ) не вызывается, поскольку уже после вычисления подвыражения x > y ясно, что выражение вернет .F. Если же задать, например, x = 5, то функция SomeFunc( ) будет выполнена. Операндом выражения может быть константа, скалярная переменная, элемент массива, вызов функции и макроподстановка. В некоторых случаях в командах VFP может употребляться и выражение с именем. Макроподстановка – это механизм, позволяющий использовать строку в качестве любого компонента оператора программы. Он осуществляется командой &, например: var1 = 5 someString = "var1" ? someString && Напечатает: var1 && Используем макроподстановку; пробел после команды & недопустим ? &someString && Напечатает: 5 Команда &VarName[.VarAdd]выполняет макроподстановку. Параметры: VarName – строка или элемент массива, содержащий имя скалярной переменной, адресуемой при макроподстановке. Имя, содержащееся в строке (элементе массива), должно быть правильно построенным именем переменной VFP. Имя не должно содержать префикса "m.", употребляемого с переменными памяти для отделения их имен от имен полей таблиц. Кроме того, не допускаются рекурсивные макроопределения. Например, ошибочен следующий код: store '&gcX' to gcX ? &gcX Макроподстановка, появляющаяся в заголовках конструкций DO WHILE, FOR и SCAN, вычисляется только один раз при входе в конструкцию. Поэтому изменения переменной, используемой макроподстановкой, во время выполнения конструкции макроподстановкой не обнаруживаются. .VarAdd – дополнительные символы к VarName. Может быть макроподстановкой. Если VarAdd – это имя свойства или поля, то нужно добавить дополнительную точку: &VarName..PropertyName Макроподстановка может быть применена в выражении и в любой команде, принимающей символьный литерал. Пример 1. В качестве VarName используется имя элемента массива. var1 = 5 declare a[2] store "var1" to a ? a[2] && Напечатает: var1 && Используем макроподстановку; пробел после команды & недопустим ? &a[2] && Напечатает: 5 Пример 2. Макроподстановка для части имени переменной (употребляется .VarAdd). && vp = 'FoxPro' varName = 'v' ? &varName.p && Напечатает: FoxPro Пример 3. Макроподстановка для псевдонима таблицы при обращении к ее полю (употребляется .VarAdd). && alias = 'Authors' select (alias) && Таблица Authors должна быть открыта ? &alias..InputDate && Напечатает значение поля Authors.InputDate Пример 4. Макроподстановка для операции и оператора присваивания. op = '+' opResult = 2 &op 5 && 2 + 5 ? opResult && Напечатает: 7 op = '*' store '=' to eq opResult &eq 2 &op 5 && opResult = 2 * 5 ? opResult && Напечатает: 10 Пример 5. Макроподстановка применяется на месте символьного литерала. close databases open database d:\HomeLibrary\HomeLibrary && && Переменные для макроподстановки au = 'Authors' auId = 'AuthorId' && Используем две макроподстановки use &au order &auId && Вместо: use Authors order AuthorId Замечание. Везде, где только возможно, используйте вместо макроподстановки выражение с именем или функцию EVALUATE( ), поскольку они работают существенно быстрее. Пример 6. Макроподстановка, которую нельзя заменить выражением с именем. store Set('TALK') to oldTalk set talk off && && Некоторый код && && Используем макроподстановку set talk &oldTalk && Восстанавливаем установку SET TALK Выражение с именем, как и макроподстановка, позволяет использовать в команде VFP строку или значение элемента массива в качестве литерала. Для этого переменная или элемент массива, содержащий символьное представление литерала, заключается в круглые скобки. Выражение с именем используется в командах, оперирующих именами файлов, псевдонимов таблиц, полей таблиц, тегов, рабочих областей и др. Пример. Вместо макроподстановки применяется выражение с именем. close databases open database d:\HomeLibrary\HomeLibrary && && Переменные для выражения с именем au = 'Authors' auId = 'AuthorId' && Используем 2 выражения с именем use (au) order (auId) && Вместо: use Authors order AuthorId Процесс создания выражения может быть частично автоматизирован при помощи построителя выражений. Команда GETEXPR [cCaptionText] TO MemVarName
|