Базовый синтаксис ABL
Код ABL хранится в файлах. Файлы могут быть файлами процедур, файлами классов или интерфейсов или включаемыми файлами, в зависимости от назначения. Код в файле состоит из операторов и блоков ABL. Блоки представляют собой группу связанных операторов ABL, которые обрабатываются как единое целое. Как и другие языки программирования, вы также можете добавлять комментарии к своему коду.
Файл процедур
Файл процедуры ABL ( .p ) представляет собой блок кода, содержащий операторы ABL. Код может быть простым с одним блоком кода или сложным с несколькими вложенными блоками. Процедура может определять переменные данных, а также использовать входные и выходные параметры. Процедура компилируется и выполняется в виртуальной машине ABL (AVM). Скомпилированная процедура называется файлом r-кода ( .r ).
Файл процедуры ABL ( .p ) состоит из ряда элементов, включая операторы и блоки, и называется внешней процедурой, которая может принимать параметры или возвращать значение.
Внешняя процедура может непосредственно содержать код или код может быть организован в виде отдельных именованных точек входа, известных как внутренние процедуры и определяемые пользователем функции.
Дополнительные сведения см. в разделе “Процедура ABL состоит из операторов“, а также “Оператор PROCEDURE” и “Оператор FUNCTION“.
Классы и интерфейсы
Файл объектно-ориентированного класса ABL ( .cls ) определяет строго типизированный класс или интерфейс. Определение класса инкапсулирует состояние и поведение. Класс может определять элементы данных и свойства, представляющие состояние класса, а также набор связанных методов и событий, обеспечивающих поведение класса. Класс имеет один или несколько конструкторов, которые принимают параметры, деструктор без параметров и один или несколько методов, которые могут принимать параметры или возвращать значение. Та же самая структура блока кода и операторы, используемые в процедурах, также используются в классах.
CLASS foo: METHOD PUBLIC VOID bar ( ): <method-body> END METHOD. <class-body> END CLASS.
Определение интерфейса объявляет прототипы для набора элементов данных, методов и событий, но не предоставляет код для методов и событий. Интерфейсы используются для согласованности между классами, реализующими интерфейс.
Файл класса ( .cls ) компилируется и выполняется в AVM. Скомпилированный класс также называется файлом r-кода ( .r ).
Дополнительные сведения см. в разделе “Начало работы с классами, интерфейсами и объектами“.
Операторы
Оператор ABL — это одна полная инструкция для AVM во время выполнения. Внутри инструкции вы используете несколько языковых элементов, таких как ключевые слова ABL, переменные и операторы. Оператор также может содержать константы, элементы данных класса или имена полей базы данных. Ключевые слова используются для указания синтаксиса для определенного типа оператора ABL. Переменные — это заполнители для значений, которые назначаются во время выполнения. Константы обычно представляют собой строки (в одинарных или двойных кавычках), логические значения (true/false или yes/no) или числа. Оператор ABL всегда заканчивается точкой. Ниже приведён пример одного оператора, который отображает «Hello, World!» в окне оповещения о сообщении.
MESSAGE "Hello, World!" VIEW-AS ALERT-BOX.
Выполнение этого кода приведёт к следующему результату на экране:
Hello, World!
ABL нечувствителен к регистру, то есть вы можете написать ключевое слово ABL или ссылку на имя переменной, таблицу базы данных или имя поля в любой комбинации прописных и строчных букв. Существуют обстоятельства при работе с командами уровня операционной системы или именами файловой системы, когда регистр должен быть правильным.
По следующей URL-ссылке вы найдёте справочную информацию обо всех операторах ABL, ABL Syntax Reference.
Блоки
ABL — это язык с блочной структурой. Блоки содержат набор операторов ABL, которые выполняются последовательно и завершаются оператором END. Верхний уровень или самый внешний блок файла процедуры называется основным блоком. Блоки кода ABL могут быть вложены друг в друга. Некоторые операторы ABL определяют блоки, которые начинаются с оператора заголовка блока, который заканчивается двоеточием (:) и закрывается оператором END.
В следующем примере кода показан пример блока. Обратите внимание, что инструкция FOR EACH начинает блок.
FOR EACH Customer: DISPLAY CustNum Name. END.
Блоки обычно используются для управления транзакциями. Транзакция — это набор изменений в базе данных или временной таблице, переменной или элементе данных класса, которые можно отменить, если произойдёт что-то неожиданное. Транзакции ограничены блоками, и каждый блок имеет встроенную обработку ошибок по умолчанию. Когда блок транзакции вложен в другой блок транзакции, он называется подтранзакцией. При возникновении ошибки первым делом необходимо отменить транзакцию или подтранзакцию. Таким образом, отмена транзакции отменяет изменения в полях базы данных, переменных, подлежащих отмене, элементах данных класса и полях временной таблицы. Вы можете дополнительно управлять обработкой ошибок, определяя явную обработку ошибок блока и добавляя операторы CATCH и FINALLY в конец блоков.
Блоки также используются для создания области действия буфера базы данных. Вы узнаете больше о буферах базы данных позже.
Есть несколько общих правил для определения того, что представляет собой блок:
- Операторы ABL, такие как FOR EACH, DO и REPEAT, определяют начало нового блока.
- Каждая процедура сама по себе представляет собой блок.
- Триггер базы данных (блок кода ABL, который выполняется всякий раз, когда происходит определенное событие базы данных) — это отдельный блок.
- Внутренняя процедура, определяемая пользователем функция, конструктор, метод и деструктор определяют блок.
Полный список типов блоков сведён в следующую таблицу:
Название блока |
Определяется |
Простой блок DO | Оператор DO используется для группировки нескольких операторов в один блок выполнения. |
Блок DO TRANSACTION | Оператор DO опцией TRANSACTION. |
Блок DO ON <directive> | Оператор DO с директивной, например, ON ERROR. |
Блок FOR | Оператор FOR. |
Блок REPEAT | Оператор REPEAT. |
Блок CATCH | Оператор CATCH. |
Блок FINALLY | Оператор FINALLY. |
Процедура (Внешняя процедура) | Неявный блок, включающий всё содержимое файла. |
Внутренняя процедура | Оператор REPEAT. |
Пользовательская функция | Оператор FUNCTION. |
Процедура триггера базы данных | Оператор TRIGGER PROCEDURE в файле процедуры. |
Блок триггера базы данных | Оператор ON с указанием события базы данных. |
Пользовательский интерфейсный триггер | Оператор ON с указанием события пользовательского интерфейса. |
Метод класса (Определённый пользователем метод) | Оператор METHOD. |
Конструктор класса | Оператор CONSTRUCTOR. |
Деструктор класса | Оператор DESCTRUCTOR. |
Свойство класса | Оператор PROPERTY с указанием GET или SET. |
Блок класса (Файл класса) | Оператор CLASS в файле класса (.cls). |
Дополнительные сведения см. в разделах Procedure Blocks and Data Access и Transactions and trigger and procedure blocks.
Комментарии
Код ABL может содержать не исполняемые комментарии. Существует два стиля комментариев: // Однострочные комментарии и /* Многострочные комментарии */ . Однострочные комментарии начинаются с // и заканчиваются в конце строки. Многострочные комментарии начинаются с /*и заканчиваются на */. Этот тип комментария может переноситься на несколько строк или располагаться на одной строке. В следующем примере показаны оба стиля комментариев:
/* Просмотр всех клиентов с балансом менее 1000*/ FOR EACH Customer NO-LOCK WHERE Customer.Balance < 1000: DISPLAY Customer.Name. FOR EACH Order OF Customer NO-LOCK: DISPLAY Order.OrderDate. // Display order dates of each customer END. END.