nsutextbook (1037554), страница 6
Текст из файла (страница 6)
Арифметические операторыObjectScript использует 7 бинарных арифметических операторов. Первые два являются также унарными операторами. В табл. 2 приведены основные арифметические операции.Таблица 2Арифметические операцииОператорОперация+Сложение. Если используется перед выражением, то это унарный оператор, который усиливает числовую интерпретацию выражения. Например:set x = 4 + 2 ( в результате x=6)set z = "546-FRJ"set y = +z (в результате y=546)Вычитание. Если используется перед выражением, то трактуется какунарный минус, т.е. меняет знак выражения и усиливает числовую интерпретацию выражения. Например:set x = 4 - 2 ( x=2)set z = "-10 degrees"set y = -z ( y=10)*Умножение.
Например: set x = 4 * 2 ( x=8)/Деление. Например: set x = 5 / 2 ( x=2.5)**Возведение в степень: set x = 5 ** 2 ( x=25)22\#Целочисленное деление. Например: set x = 5 \ 2 ( x=2)Остаток от деления: set x = 5 # 2 ( x=1)Например:SAMPLES>set x = 4 + 2SAMPLES>write x6Операторы в выражении выполняются строго слева направо, нет приоритетов операций, об этом нужно помнить, чтобы избежать ошибок. Для изменения порядка следования операций можно использовать скобки. Например, сравните 2 выражения:Set sum=sum+(num#10)+(num\10) и Set sum=sum+num#10+num\10.Вы получите разный результат.3.2.6. Оператор DoВ ObjectScript все подпрограммы как системные, так и пользовательские, запускаются с помощью команды Do.
Формы использования команды:Вызов программы P1: Do ^P1, где P1 – имя файла, где располагается программа.Вызов подпрограммы P2 из программы P1: Do P2^P1, где ^ - означает вызов глобальной программы, т.е. программы, которая располагается в другом файле.Вызов глобальной программы без параметров: Do ^sum.Вызов глобальной программы с параметрами a и b: Do ^sum(a, b).Вызов подпрограммы внутри текущей программы Do sum.Для демонстрации, рассмотрим системную подпрограмму, которая вычисляет квадратный корень числа – %SQROOT. Можно запустить ее с помощью команды Do, поставив перед ней знак ^ ( ^ – циркумфлекс). Заметим, что подпрограммы, перед которымистоит знак %, являются системными. В процессе выполнения программа запрашиваетчисло, из которого нужно извлечь квадратный корень.
Например:SAMPLES>Do ^%SQROOTSquare root of: 100 is: 10Square root of:К тому же, можно запустить процедуру внутри подпрограммы, ссылаясь на меткустроки (называемую также тегом), где процедура начинается в подпрограмме. Метка располагается непосредственно перед циркумфлексом (^). Например:Set %X = 523Do INT^%SQROOTWrite %YВ данном примере задается значение системной переменной %X, которое используется процедурой INT программы %SQROOT. Процедура INT вычисляет квадратный корень из числа 523 и сохраняет его в системной переменной %Y.3.2.7. Команда KillКоманду Kill можно использовать для удаления переменной, а безаргументнаяформа может использоваться для удаления всех переменных памяти.
Синтаксис:Kill <переменные>Команды Kill и безаргументная форма Write могут быть полезны при отладке программы. Например:SAMPLES>set a = 1, b = 2, c = 3, d = 4, e = 5SAMPLES>writea=123b=2c=3d=4e=5SAMPLES>kill cSAMPLES>writea=1b=2d=4e=53.2.8. Команда QuitЭта команда используется для завершения выполнения подпрограммы. Ее можноразмещать в нескольких местах подпрограммы. Если Quit не имеет аргументов, оставляйте всегда 2 пробела после нее.Замечание по поводу ошибок в подпрограммах.
Caché Studio будет выявлять синтаксические ошибки, которые делаются при вводе оператора. Но другие ошибки, такиекак undefined variable во время выполнения будут завершать выполнение программы. Выувидите сообщение об ошибке вместе с номером строки, содержащей ошибку в окнеCaché Terminal. К тому же, подсказка:SAMPLES>будет изменена на подсказку:SAMPLES 2d0>.Введите Q (аббревиатура команды Quit) для того, чтобы вернуть подсказку в нормальное состояние. Например вызов программы ^badroutine приводит к ошибке <UNDEFINED> :SAMPLES>do ^badroutine<UNDEFINED>start+3^badroutineВведите команду Quit, чтобы вернуть подсказку в нормальное состояние:SAMPLES 2d0>QuitSAMPLES>3.2.9. Комментарии// – текст после // и до конца строки рассматривается как комментарий.; – текст после ; и до конца строки рассматривается как комментарий/**/ – многострочный комментарий3.2.10. Конструкция IfСинтаксис команды:if condition {code} elseif condition {code} else {code}Где condition - это условие вида:condition = <выр1>[,<выр2>,...,<выр3>]Чтобы блок программы выполнился, все условия в списке должны быть логическиистинными.code это блок кода, т.е.
несколько строк кода, заключенных в фигурные скобки.Пример 1:Set x=0,y=-1,a=0if x<1,y<1 Set a=1write a24Пример 2:rootread "Введите пароль", parolif ( parol="salut"){ write !, "Приветствуем Вас!"}else{ write !,"Пароль не верен",! }quit3.2.11. Операции сравнения и логические операцииОперации сравнения := (равно), > (больше) , < (меньше), '= ( не равно), '> ( не больше), '< (не меньше).Логические операции:& , && – логическое И ;!, || – логическое ИЛИ ;' – отрицание.Отличие & от && и ! от || заключается в том, что операторы && и || прекращают выполнение операции, если вычисление левого операнда уже дает окончательный результат.Примеры истинных логических выражений:if (2 = 2) && (3 = 3) { write "оба выражения истинны" }if (2 = 2) || (3 = 4) { write "только одно истинно" }if '(2 = 3) { write "не равны" }3.2.12.
Постусловные конструкцииСинтаксис:<команда> : <условие>Команда выполняется, если условие истинно. Почти все команды Caché поддерживают постусловный синтаксис, кроме команд if else/elseif, For, While, Do/While.Например:1. Quit: name=” ” , что эквивалентно If name=” ” quit2. Write: count<5 “число меньше 5”,!3. Write: count>5 “число больше 5”,!3.2.13. Функции $Case и $SelectФункция $Case вычисляет значение первого аргумента и возвращает результат, который соответствует значению выражения в списке аргументов.
Последний аргумент можетбыть значением по умолчанию. Синтаксис функции $Case:$Case(<перем>,<знач1>:<выр1>[,<знач2>:<выр2>...][,:<знач по умолч>]))$Case может возвращать литерал, имя процедуры или подпрограммы, например:READ "Введите число от 1 до 3: ", xSET multi = $CASE(x, 1:"единица", 2:"двойка", 3:"тройка", :" ошибка ввода")write multido $case( surv, 1:celebrate^survivor() , :complain^survivor() )Yippee! I won! // результат выполнения подпрограммы celebrate^survivor()Функция $Select очень напоминает функцию $Case и имеет следующий формат:25$SELECT(<выражение1>:<значение1>,<выражение2>:<значение2>,...)$S(<выражение1>:<значение1>,<выражение2>:<значение2>,...)Логические выражения отделяются от значений двоеточиями. Функция $SELECTпросматривает выражения слева направо и возвращает значение соответствующее первому истинному выражению.
Например:StartREAD !,"Задайте номер уровня: ", aQUIT:a=""SET x=$SELECT(a=1:"Level1",a=2:"Level2",a=3:"Level3")GOTO @x3.2.14. Конструкция ForКонструкция For используется для создания циклов. Общая форма команды For:For <переменная>=<параметр> {код}Где переменная – это счетчик цикла. Параметр может иметь несколько форм использования:• список выражений, разделитель списка – запятая.• <начальное значение>:<инкремент>• <начальное значение>:<инкремент>:<конечное значение>Все параметры цикла необязательны.
Цикл For имеет две формы использования безаргументов и с аргументами. Безаргументная форма реализует бесконечный цикл. Долженбыть обеспечен выход из цикла либо с помощью оператора Quit, либо с помощью Goto.Различные формы конструкций цикла могут свободно комбинироваться.Примеры:1. Параметр – это список различных выражений:For prime=2,3,5,7,11 {write !,prime, "это простое число" }2. Задание числового диапазона:For i=1:1:10 {write !,"i"," ",i**2 }3. Числовой диапазон без конечного значения:for i = 2:2{ write !,iQuit:i>15}write i4.
Безаргументная форма. В этой форме нет ни переменной цикла, ни начального,ни конечного значения:For {код} // как минимум 2 пробела после ForНапример:For {Read !,”Введите число:”, numQuit:num=””Do Calc(num)}5. Комбинированная форма:For lv = 2, 5, 49, 1:1:15, 1:2 { код }В этом случае, цикл сначала выполнится для значений параметра 2, 5, 49, затемдля значений 1:1:15, затем для 1:2. В последнем случае должен быть обеспечен выход изцикла.263.2.15. Конструкция While и Do/WhileРаботают также как и for без аргумента, т.е.
повторяют набор команд, и завершаютвыполнение по условию. While – цикл с предусловием, Do/While – цикл с постусловием.Как и в случае for команда Quit внутри блока завершает цикл. Синтаксис:do {code} while conditionwhile condition {code}где condition - это условие:condition = <выр1>[,<выр2>,...,<выр3>]Чтобы блок программы выполнился, все условия в списке должны быть логическиистинными.Пример программы с числами Фибоначчи. Программа набирается в Caché Studio,текст программы приведен ниже:fibonacci ; генерирует числа Фибоначчиread !"Генерируем числа Фибоначчи до: ", uptoset t1=1, t2=1, fib=1write !do { write fib," " set fib=t1+t2, t1=t2 ,t2= fib}while (fib'>upto)set t1=1, t2=1, fib=1write !while (fib'>upto){ write fib," " set fib=t1+t2, t1=t2 ,t2= fib}Выполнение программы в Caché Terminal:SAMPLES>do ^fibonacciГенерируем числа Фибоначчи до: 1001 2 3 5 8 13 21 34 55 891 2 3 5 8 13 21 34 55 893.
3. Программы Caché3.3.1. Виды программCaché позволяет создавать 3 вида программ:1.Макрокод (расширение MAC) может содержать код ObjectScript, макродирективы,макросы, встроенный SQL, встроенный HTML. Он компилируется в промежуточныйкод, а тот уже в объектный(OBJ).2.Промежуточный код (расширение INT) это рабочий код ObjectScript. Макросы ивстроенный SQL сначала преобразуются в промежуточный код.3.Включаемые макропрограммы (расширение INC) могут содержать любой код, разрешенный в MAC-программах.