Для начала не плохо было бы скачать OPL руководство для Psion Series 5mx. Необходимый ZIP архив можно найтиздесь. Большая часть языка не претерпела изменений по сравнению с ER5. Все отличия отмечены в документе Porting Guide, являющимся частью OPL ER6 SDK.
OPL очень простой и понятный язык. По простоте освоения и использования он даст фору широко раскрученному BASIC-у. OPL сильно похож на английский язык, он также состоит из предложений, параграфов, существительных, глаголов и.т.д.
Процедура - это обособленная часть кода, которой дано имя и которая может быть вызвана из другой части кода. Для обозначения процедур в OPL используются ключевые слова PROC ... ENDP. Имя процедуры должно обязательно заканчиваться знаком двоеточие (двоеточие тоже считается частью имени процедуры), и оно не может содержать пробелы. Для того чтобы вызвать процедуру, необходимо просто указать ее имя.
При запуске программы в первую очередь вызывается процедура main:. При достижении конца этой процедуры (ключевого слова ENDP), программа закрывается.
PROC main: setup_app: do_something_nice: save_status: ENDP PROC setup_app: REMDo something interesting here ENDP ...
В приведенном примере процедура main: после открытия вызывает друг за другом три другие процедуры. После того как эти процедуры выполнятся, программа закроется. Обратите внимание, что каждая процедура начинается со слов PROC [имя]: и заканчивается ENDP.
Константы - это именованные величины, которые не изменяются в течении выполнения программы. Использование констант во многом облегчает чтение программы. Например, если в нескольких местах Вам необходимо использовать число 103782376892, то можно в начале программы присвоить ему имя: K_Big_Number%=103782376892 а затем везде его использовать.Все константы должны начинаться с префикса "K_". Имена констант должны быть короткими и понятными.
Необходимо также упомянуть системные константы. Для того чтобы их использовать, необходимо в программу добавить строчку:
INCLUDE"Const.oph"
Более подробно о доступных системных константах и об их назначении можно узнать в документации по OPL Development Kit from Symbian.
Переменной называется именованная область памяти, значение которой можно изменять. OPL Умеет работать с числовыми, символьными переменными, а также с массивами. Имя переменной обязательно должно заканчиваться специальным символом, указывающим на ее тип.
Целочисленные переменные оканчиваются символом% и служат для хранения небольших целых чисел. Если Вам необходима переменная для большого или дробного числа, используйте символ&. Строковые переменные обозначаются символом$.
varint% varfloat& str$
Прежде чем использовать переменные, их необходимо объявить. В зависимости от способа определения переменные делятся на два типа: локальные(LOCAL) и глобальные (GLOBAL). Глобальные переменные можно использовать в любой точке программы, а локальные - только в той процедуре, где они были объявлены. После завершения процедуры локальные переменные удаляются из памяти.
Команду определения переменных необходимо помещать в первую строку процедуры. В одной строке можно определить несколько переменных.
PROC main: GLOBAL high_score%,big_number& ... PROC local: LOCAL name$(20) ...
Обратите внимание, для строковой переменной name$ мы указали максимальную длину(20 символов). Если Вы забудете указать длину строковой переменной, то на этапе компиляции получите сообщение об ошибке.
Для определения переменных и изменения их значений используется символ равенства, например
varint%=2 bignum&=1383512467 varfloat&=2.5 str$="string of text"
Обратите внимание, при задании строки используются двойные кавычки.
Для того чтобы определить массив, необходимо в строке объявления после имени переменной(имени массива) в круглых скобках указать необходимое число элементов.
GLOBAL table%(10)
Нумерация элементов массива начинается с единицы. Для доступа к элементу массива используются круглые скобки.
Для того чтобы задать массив строк, необходимо в круглых скобках указать два числа.
GLOBAL name_table$(10,20)
В данном случае у нас будет создано 10 строк длинной 20 символов.
Циклы позволяют компактно записать многократно повторяющееся действие. Давайте рассмотрим пример.
PROC loop: LOCAL foo% foo%=0 <b>DO</b> foo%=foo%+1 table%(foo%)=foo% <b>UNTIL foo%=10</b> ENDP
Ключевые слова DO... UNTIL ограничивают тело цикла, которое будет повторяться до тех пор, пока не выполнится условие, стоящее за словом UNTIL. В данном случае внутри цикла мы увеличиваем локальную переменную foo% на единицу и записываем ее в массив table% (Этот глобальный массив определен где-то выше). После слова UNTIL стоит условие foo%=10, то есть цикл будет повторяться 10 раз.
Программирование немыслимо без условных операторов. Практически всегда необходимо проверить какое-нибудь условие и в зависимости от результата выполнить то или иное действие. Для организации такой проверки используется ключевое слово IF. Рассмотрим пример.
IF guess%=1 guess_right: ELSEIF guess%=2 guess_close: ELSE guess_wrong: ENDIF
Как видите, читается код довольно легко. Если переменная guess%=1, тогда выполняем процедуру guess_right:, если guess%=2, то процедуру guess_close:, если ни одно из условий не подошло - выполняем процедуру guess_wrong:.
Возможно применение и более короткого варианта:
IF guess%=1 guess_right: ELSE guess_wrong: ENDIF
Если guess%=1, то выполняем guess_right:, если нет - guess_wrong:.
Для того чтобы программу было удобнее читать, в нее можно добаить комментарии. Комментарии ничего не делают, это своеобразная шпаргалка для программиста. Для создания комментария служит ключевое слово REM. Все что стоит после этого слова (до конца строки) игнорируется компилятором.
REM This routine calculates the cursor position REM foo_x% represents the temporary x co-ordinate REM foo_y% represents the temporary y co-ordinate
Как видите, все очень просто. В следующей статье мы познакомимся с событиями и узнаем, как с ними работать.