Мельница данных- Выражения и операции  (раздел целиком)  (08.12.2019)
Выражения и операции

1. Состав выражения
Любое выражение имеет тип. Выражения состоят из следующих элементов:
  • Целая числовая константа (0 3 234);
  • Вещественная числовая константа. Дробная часть отделяется от целой точкой (".") (3.14 2.71);
  • Строковая константа. Заключается в апострофы. ('Some string' '10', '01.01.2006' 'now');
  • Логическая константа (True False);
  • Безтиповая (любого типа) константа nil;
  • Зарезервированное слово Self. Обозначает разный объект в зависимости от контекста:
    • В методах класса кроме конструктора - использование запрещено.
    • В методах экземпляра - всегда экземпляр, для которого вызван метод.
    • В конструкторе - до вызова унаследованного метода значение не определено. После вызова - ссылка на сконструированный объект.
    • В выражениях условий отбора - объект, для которого принимается решение о его вхождении в отбор.
  • Квалификатор.
  • Агрегат.

2. Квалификатор

Квалификатор обозначает объект, переменную, параметр, свойство, поле, вызов функции. Квалификатор состоит из идентификаторов, разделенных точкой.

        Result
        AName
        Caption
        LObject.Name
        LObject.Parent.Name
        LObject.ChildCount
        LObject.HasAsParent(LOtherObject)

При интерпретации квалификатора используется следующий порядок разбора идентификатора:

  1. Контекстная переменная (для выражений условий отбора доменов)
  2. Локальная переменная
  3. Параметр
  4. Имя элемента перечисления
  5. Имя класса. Вне контекста означает ссылку на соответствующий объект класса TClass
  6. Имя поля
  7. Имя метода
  8. Имя свойства

При интерпретации квалификатора внутри выражения агрегата правила разбора идентификатора изменяются:

  1. Контекстная переменная (для выражений условий отбора доменов)
  2. Имя элемента перечисления
  3. Имя класса. Если это имя агрегируемого класса, то дальнейшие разыменования относятся к агрегируемому объекту
  4. Имя поля
  5. Имя метода
  6. Имя свойства
  7. Локальная переменная
  8. Параметр


3. Агрегат

Агрегат определяет агрегированное значение над экземплярами определенного класса, удовлетворяющими условиям агрегации. Агрегаты бывают следующих типов:

  • any - первый попавшийся объект. Результат имеет тип ссылки на объект агрегируемого класса.
           
    any(TObject with Master = Self.Parent)  
    //первый попавшийся объект, имеющий значение 
    //свойства Master равным значению свойства 
    //Parent текущего (контекстного) объекта.
    
  • count - количество объектов. Результат имеет целочисленный тип.
           
    count(TObject with Master = Self.Parent) 
    //количество объектов, имеющих значение свойства 
    //Master равным значению свойства Parent 
    //текущего объекта.
    
  • sum - сумма значений свойства, поля или функции объектов. Результат имеет тип суммируемого поля, свойства или функции
           
    sum(TExam.Mark with Master = LStudent) //сумма 
    //баллов студента по его испытаниям
    
  • max, min - соответственно максимальное и минимальное значений свойства, поля или функции объектов. Результат имеет тип агрегируемого поля, свойства или функции
           
    min(TObject.Created) // момент создания первого 
    //объекта Системы.
    

Внутри выражения агрегата правила разбора идентификатора изменяются на следующие:

  1. Контекстная переменная (для выражений условий отбора доменов)
  2. Имя элемента перечисления
  3. Имя класса. Если это имя агрегируемого класса, то дальнейшие разыменования относятся к агрегируемому объекту
  4. Имя поля
  5. Имя метода
  6. Имя свойства
  7. Локальная переменная
  8. Параметр


4. Операции

Операции связывают элементы выражений.

Таблица операций в порядке приоритета:
Левый
операнд
Правый операнд
Целый Вещест-
венный
Дата Время Дата со временем Логи-
ческий
Строковый Объект nil
not
Нет ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
* (звездочка)
Целый Целый Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
/ (слэш, дробь)
Целый Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
div
Целый Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
and
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
or
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
+ (плюс)
Целый Целый Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата Дата Дата со временем Запрещено Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время Время Время Дата со временем Время Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем Дата со временем Дата со временем Запрещено Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Строковый ЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
- (минус)
Целый Целый Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Вещест-
венный
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата Дата Дата со временем Целый Дата со временем Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время Время Время Дата со временем Время Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем Дата со временем Дата со временем Вещест-
венный
Дата со временем Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
=, <> (равно, не равно)
Целый Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Вещест-
венный
Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Дата ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Время ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Дата со временем ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещено Логи-
ческий
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Логи-
ческий
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
<, >, <=, >= (меньше, больше, меньше либо равно, больше либо равно)
Целый Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
Логи-
ческий
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещено Логи-
ческий
Запрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
ЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
is
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Логи-
ческий
Запрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
as
Целый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Вещест-
венный
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Время ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Дата со временем ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Логи-
ческий
ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Строковый ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено
Объект ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено Объект Запрещено
nil ЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещеноЗапрещено


4.1. Особенности применения операций
  1. Приоритет сравнений ниже приоритета операций булевой логики. Поэтому выражение
    LObject.Master = LMaster and LObject.Parent = LParent
    будет интерпретироваться следующим образом:
    LObject.Master = (LMaster  and LObject.Parent) = LParent
    и вызовет ошибку компиляции из-за применения операции and к объектам. Необходимо писать:
    (LObject.Master = LMaster) and (LObject.Parent = LParent)
  2. Любое значение (выражение любого типа) сравнивается с безтиповой константой nil:
          LObject := any(TObject with Name = 'Some name');
          if LObject = nil then
             .....
          
  3. Операции "Унарный минус" не существует. Для задания отрицательных констант пользуйтесь конструкцией 0-Значение:
    Result := 0-1;