Операторы сравнения
Все операторы сравнения - это бинарные операторы, которые сравнивают значения операндов друг с другом. В результате сравнения, если есть соответствие условию, операторы всегда приводят к логическому значению .T. (истина). Если условие не выполнено, то значение будет .F. (ложь).
Доступные в Xbase++ операторы сравнения:
Оператор
==
проверка точного равенства
проверка идентичности ссылок
= проверка равенства *)проверка идентичности ссылок
<> # !=
проверка на неравенство *)
$
подстрока в пределах символьной строки
! *) Сравнение символьных строк зависит от настроечных команд SET EXACT, SET COLLATION и SET LEXICAL.
Необходимо обратить
на существование двух различных оператора равенства: простого "=" и точного "==".
Простой оператор равенства не может проверять все типы данных на равенство. Также, сравнение символьных строк, использующих этот оператор, зависит от установленных параметров настроечных команд SET EXACT ON|OFF и SET COLLATION. SET EXACT уточняет, рассматриваются ли пробелы в конце строк символов.
Оператор "==" может сравнивать значения любого типа данных. Переменные типов данных массива (A), блока кода (B) и объекта (O) проверяются, чтобы определить, ссылаются ли они на те же значения. Сравнивая символьные строки, оператор точного равенства возвращает значение .T. (истина), когда все символы обеих строк идентичны (бинарное сравнение). Когда сравниваются две переменные типа данных A, B или O, сравнение также приводит к истине только, когда обе переменных ссылаются на один и тот же массив, блок кода или объект.
Обычно оба операнда при сравнении должны иметь одинаковый тип данных. Однако, операторы равенства могут сравнивать все типы данных с NIL. Сравнение с NIL возвращает значение .T. (истина) только, когда значение обоих операндов равно NIL.
Оператор $ проверяет, содержится ли подстрока (левый операнд) в указанной символьной строке (правый операнд) (см. разделы для индивидуальных типов данных при обсуждении главы "Операции и операторы для простых типов данных").
"James" $ "James Bond's BMW" // результат: .T.
"james" $ "James Bond's BMW" // результат: .F.
"Bond's" $ "James Bond's BMW" // результат: .T.
"Bond s" $ "James Bond's BMW" // результат: .F.
Код |
---|
// The example shows results of the = operator.
PROCEDURE Main
SET EXACT ON
? "ABC" = "ABC " // result: .T.
? "ABC " = "ABC" // result: .T.
? "" = "ABC" // result: .F.
? "ABC" = "" // result: .F.
? "ABC" = "ABCDE" // result: .F.
? "ABCDE" = "ABC" // result: .F.
SET EXACT OFF
? "ABC" = "ABC " // result: .F.
? "ABC " = "ABC" // result: .T.
? "" = "ABC" // result: .F.
? "ABC" = "" // result: .T.
? "ABC" = "ABCDE" // result: .F.
? "ABCDE" = "ABC" // result: .T.
? CToD("12/28/2005") = CToD("12/31/2005")
// result: .F.
? .T. = .F. // result: .F.
? NIL = NIL // result: .T.
? 2 = 1 // result: .F.
RETURN
// The example demonstrates resultsof the exact equal operator.
PROCEDURE Main
? "ABC" == "ABC" // result: .T.
? "ABC" == "XYZ" // result: .F.
? "ABC" == "ABC " // result: .F.
aArray1 := {1, 2, 3} // Create array reference
aArray2 := {1, 2, 3} // Create new array reference
aArray3 := aArray1 // Assign array reference
? aArray1 == aArray2 // result: .F.
? aArray1 == aArray3 // result: .T.
? aArray2 == aArray3 // result: .F.
RETURN
|