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

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;