Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

3.5. Логический тип данных

3.5.1. Логические операции

Логическая величина может принимать два значения .T. – истина и .F. – ложь. Регистр написания логических констант .T. и .F. произвольный.

Логические величины возвращаются в результате выполнения логических операций, операций отношения, а также некоторыми встроенными функциями. Функция, возвращающая логическую величину, может быть создана и пользователем.

Логические операции и операции отношения выполняются, как и другие операции VFP, слева направо в порядке их приоритета.

Операндами логических операций являются выражения логического типа. Перечень логических операций дан в табл. 3.20.

Таблица 3.20

Логические операции

Операция

Описание

Пример

NOT | !

Логическое отрицание

not cVarA = cVarB ! nVar1 = nVar2

AND

Логическое И

lVar1 and lVar2

OR

Логическое ИЛИ

lVar1 or lVar2

В табл. 3.20 логические операции приведены в порядке убывания приоритета: наивысший приоритет имеет операция NOT, наименьший – OR.

Замечание. В качестве исключающего ИЛИ можно применять операцию отношения "#", например:

.T. and 'a' # 'b'

Результат логической операции определяется в соответствии с таблицей истинности (табл. 3.21).

Таблица 3.21

Таблица истинности

Операнды

Операции и их результат

x

y

NOT x

x AND y

x OR y

x # y

.T.

.T.

.F.

.T.

.T.

.F.

.T.

.F.

.F.

.F.

.T.

.T.

.F.

.T.

.T.

.F.

.T.

.T.

.F.

.F.

.T.

.F.

.F.

.F.

Пример:

x = .T.

y = .F.

lResult = x or not y and x # y

? lResult && Напечатает: .T.

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

lResult = ((x # y) and (not y)) or x

На первое место поставлена операция "#", поскольку операции отношения имеют более высокий приоритет, чем логические операции.

3.5.2. Операции отношения

Приведены в табл. 3.22.

Таблица 3.22

Операции отношения

Операция

Описание

Приме

<

Меньше

? 23 < 54

>

Больше

? 1 > 2

=

Равно

? cVar1 = cVar2

<>, #, !=

Не равно

? .T. != .F.

<=

Меньше или равно

? {^1998-02-16} <= {^1998-02-16}

>=

Больше или равно

? 32 >= nHisAge

==

Точное равенство (употребляется преимущественно со строками)

? status == "Open"

Операндами операций отношения могут быть данные любого типа. При этом операнды одной операции должны иметь одинаковый тип, например:

? 1 > 2 && Напечатает: .F.

? 1 > "a" && Это ошибка

При обнаружении в операции операндов разного типа генерируется ошибка "Operator/operand mismatch".

При сравнении символьных данных на результат операции влияет установка команды SET EXACT (детали см. в описании команды). Исключение составляет операция "==": выражение с этой операцией и символьными операндами вернет .T., если оба операнда имеют одинаковую длину и содержат в каждой позиции одинаковые символы, например:

? 'abc' == 'abc' && Напечатает: .T.

&& Включаем концевые пробелы

? 'abc ' == 'abc' && Напечатает: .F.

? 'abc' == 'abc ' && Напечатает: .F.

Замечание. Логическое выражение, например следующее:

varX >= 2 and varX =< 5

и любое ему подобное можно заменить функцией Between( ):

Between(varX, 2, 5)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]