Руководство разработчика

Операции сравнения

Группа операций сравнения объединяет шесть парных операций, результатом которых является логическое значение. Сравнение на равенство и неравенство определено для всех типов данных. Объектные типы могут сравниваться при условии принадлежности к одной ветви иерархии типов. Остальные операции сравнения определены для типов ЦЕЛОЕ, ЧИСЛО, СТРОКА, ДАТА и ВРЕМЯ. Описание операций сравнения приведено в таблице.

ОперацияСинтаксисКомментарий
равенство<значение1> = <значение2>проверяет равенство значений
неравенство<значение1> <> <значение2>проверяет неравенство значений
больше<значение1> > <значение2>проверяет условие того, что первое значение больше второго
меньше<значение1> < <значение2>проверяет условие того, что первое значение меньше второго
больше или равно<значение1> >= <значение2>проверяет условие того, что первое значение больше или равно второму
меньше или равно<значение1> <= <значение2>проверяет условие того, что первое значение меньше или равно второму

Сравнение на равенство или неравенство

Для сравнения на равенство (неравенство) типы правого и левого значения должны совпадать, за некоторыми исключениями, описанными ниже.

Для значений типов ЦЕЛОЕ, ДАТА и ВРЕМЯ существует точное условие равенства, которое не зависит от прочих условий.

Допускается сравнение значений типов ЦЕЛОЕ и ЧИСЛО. При этом целочисленное значение преобразуется в вещественное. На сравнение вещественных чисел влияет текущая точность.

ПЕРЕМ СТРОКА: а = "альфа"
ПЕРЕМ ЦЕЛОЕ: б = 42
ПЕРЕМ *: в = 3.14

ОТЛАДКА(а = б) // ошибка компиляции: запрещено сравнение строки и целого

ОТЛАДКА(а = в) // ошибка выполнения: запрещено сравнение строки и вещественного
               // компилятор пропускает, т.к. "в" имеет неопределенный тип *
			   
ОТЛАДКА(б = в) // нет ошибки: НЕТ - 42 преобразуется в 42.0,
               // что при стандартной точности не равно 3.14

Для типа СТРОКА сравнение выполняется с учетом регистра символов.

Допускается сравнение значения любого типа и пустого значения (см. ключевое слово ПУСТО), которое всегда дает неравенство. Также допускается сравнение двух пустых значений, которые считаются равными.

ПЕРЕМ *: а
ПЕРЕМ *: б
ОТЛАДКА(а = б) // ДА: два пустых значения равны
б = 42
ОТЛАДКА(а = б) // НЕТ: пустое значения неравно любому непустому, но ошибки нет
а = "Абв"
ОТЛАДКА(а = б) // ошибка времени выполнения: нельзя сравнивать целое и строку 

Для сравнения на равенство значений объектного типа, типа интерфейс, контейнеров и типа функции используется тип и внутреннее состояние. Значения считаются равными только при точном совпадении типа и равенстве внутреннего состояния.

Сравнение на больше или меньше

Для типов ЦЕЛОЕ, ЧИСЛО, ДАТА и ВРЕМЯ, которые можно назвать арифметическими, порядок однозначно определен. Допускается сравнение значение значений типа ЦЕЛОЕ и ЧИСЛО, при которых целочисленное значение преобразуется в вещественное. Во всех остальных случаях типы правого и левого значения должны совпадать. При сравнении на больше-равно или меньше-равно используются те же критерии равенства, что и при сравнении на равенство.

Для типа СТРОКА выполняется посимвольное сравнение с учетом регистра символов. При этом считается, что заглавная буква (в верхнем регистре) меньше прописной (в нижнем регистре). При совпадении всех предшествующих символов и достижении конца одной из строк большей считается более длинная строка.


См. также: