Операции сравнения
Группа операций сравнения объединяет шесть парных операций, результатом которых является логическое значение. Сравнение на равенство и неравенство определено для всех типов данных. Объектные типы могут сравниваться при условии принадлежности к одной ветви иерархии типов. Остальные операции сравнения определены для типов ЦЕЛОЕ, ЧИСЛО, СТРОКА, ДАТА и ВРЕМЯ. Описание операций сравнения приведено в таблице.
Операция | Синтаксис | Комментарий |
равенство | <значение1> = <значение2> | проверяет равенство значений |
неравенство | <значение1> <> <значение2> | проверяет неравенство значений |
больше | <значение1> > <значение2> | проверяет условие того, что первое значение больше второго |
меньше | <значение1> < <значение2> | проверяет условие того, что первое значение меньше второго |
больше или равно | <значение1> >= <значение2> | проверяет условие того, что первое значение больше или равно второму |
меньше или равно | <значение1> <= <значение2> | проверяет условие того, что первое значение меньше или равно второму |
Сравнение на равенство или неравенство
Для сравнения на равенство (неравенство) типы правого и левого значения должны совпадать, за некоторыми исключениями, описанными ниже.
Для значений типов ЦЕЛОЕ, ДАТА и ВРЕМЯ существует точное условие равенства, которое не зависит от прочих условий.
Допускается сравнение значений типов ЦЕЛОЕ и ЧИСЛО. При этом целочисленное значение преобразуется в вещественное. На сравнение вещественных чисел влияет текущая точность.
ПЕРЕМ СТРОКА: а = "альфа" ПЕРЕМ ЦЕЛОЕ: б = 42 ПЕРЕМ *: в = 3.14 ОТЛАДКА(а = б) // ошибка компиляции: запрещено сравнение строки и целого ОТЛАДКА(а = в) // ошибка выполнения: запрещено сравнение строки и вещественного // компилятор пропускает, т.к. "в" имеет неопределенный тип * ОТЛАДКА(б = в) // нет ошибки: НЕТ - 42 преобразуется в 42.0, // что при стандартной точности не равно 3.14
Для типа СТРОКА сравнение выполняется с учетом регистра символов.
Допускается сравнение значения любого типа и пустого значения (см. ключевое слово ПУСТО), которое всегда дает неравенство. Также допускается сравнение двух пустых значений, которые считаются равными.
ПЕРЕМ *: а ПЕРЕМ *: б ОТЛАДКА(а = б) // ДА: два пустых значения равны б = 42 ОТЛАДКА(а = б) // НЕТ: пустое значения неравно любому непустому, но ошибки нет а = "Абв" ОТЛАДКА(а = б) // ошибка времени выполнения: нельзя сравнивать целое и строку
Для сравнения на равенство значений объектного типа, типа интерфейс, контейнеров и типа функции используется тип и внутреннее состояние. Значения считаются равными только при точном совпадении типа и равенстве внутреннего состояния.
Сравнение на больше или меньше
Для типов ЦЕЛОЕ, ЧИСЛО, ДАТА и ВРЕМЯ, которые можно назвать арифметическими, порядок однозначно определен. Допускается сравнение значение значений типа ЦЕЛОЕ и ЧИСЛО, при которых целочисленное значение преобразуется в вещественное. Во всех остальных случаях типы правого и левого значения должны совпадать. При сравнении на больше-равно или меньше-равно используются те же критерии равенства, что и при сравнении на равенство.
Для типа СТРОКА выполняется посимвольное сравнение с учетом регистра символов. При этом считается, что заглавная буква (в верхнем регистре) меньше прописной (в нижнем регистре). При совпадении всех предшествующих символов и достижении конца одной из строк большей считается более длинная строка.