Урок 3. Тип «Булево» и логические операции
277.87K

Урок 3

1. Урок 3. Тип «Булево» и логические операции

2.

Логические операции
Самая простая логическая операция — это операция Сравнение на равенство. Она выясняет, равны
между собой два значения или нет.
Логическая операция Сравнение на равенство обозначается двумя знаками равенства «==». В
подавляющем большинстве случаев логические операции используются в инструкциях если ,
для и пока . Но эти инструкции вам ещё незнакомы.
Поэтому знакомиться с операцией Сравнение на равенство вы будете с помощью инструкции
присваивания. В ней эта операция будет выглядеть немного странно, поэтому для пущей важности вы
заключите её в скобки.
метод
Скрипт()
пер Результат
= ()
;
Теперь внутри скобок напишите операцию Сравнение на равенство. Например, 5 = 5.
Затем напишите ещё одну инструкцию присваивания, но так, чтобы в операции Сравнение на
равенство участвовали разные числа. Например, 5 и 2.
Запустите скрипт в режиме отладки и посмотрите, чему равны переменные в этих инструкциях

3.

Логические операции
метод
Скрипт()
пер Результат = (5 == 5)
пер ДругойРезультат = (5 == 2)
;
Вы увидите, что там, где сравниваются два одинаковых числа, результатом является значение Истина
А там, где сравниваются разные числа, результатом является значение Ложь . К тому же оба этих
значения имеют тип Булево.
Логических операций в «1С:Элементе», как и в жизни, довольно много. Все они интуитивно понятны,
и нет особой надобности в том, чтобы тренироваться в их использовании. Единственное, что может
вызвать трудность, — это то, какими символами они обозначаются.

4.

Логические операции
Сравнение на равенство ==
5 ==5 (Истина ), 2==5 (Ложь )
Сравнение на неравенство !=
2 != 5 (Истина ), 5 != 5 (Ложь )
Сравнение на строгое больше >
5 > 2 (Истина ), 2 > 5 (Ложь )
Сравнение на нестрогое больше >=
2 >= 2 (Истина ), 2 >= 5 (Ложь )
Сравнение на строгое меньше <
2 < 5 (Истина ), 5 < 2 (Ложь )
Сравнение на нестрогое меньше <=
2 <= 2 (Истина ), 5 <= 2 (Ложь)
Все перечисленные в этой таблице операции
называются операциями сравнения — потому
что они сравнивают два значения.
Причём операции Сравнение на равенство и
Сравнение на неравенство можно применять
к значениям любых типов. Главное, чтобы
типы были одинаковыми с одной и с другой
стороны операции.
А вот оставшиеся четыре операции
(больше/меньше) можно применять только к
тем типам, значения которых можно
сравнивать. Все такие типы являются
наследниками типа Сравнимое . Пока просто
запомните это, потому что с иерархией типов
вы познакомитесь позже.

5.

Тернарная операция
Вы уже знаете, что в основном логические операции используются в инструкциях если, для и пока .
Однако есть одна интересная операция, которая по своей сути похожа на очень упрощённую
инструкцию. Это тернарная операция
Тернарная операция позволяет выбрать одно из двух значений в зависимости от значения
логического выражения. Тернарная операция обозначается вопросительным знаком «?» и использует
двоеточие «:» для разделения значений, которые нужно выбрать.
логическое_выражение ? выражение_истина : выражение_ложь
Например, если ваша итоговая оценка 4 или 5, то вы получаете стипендию 3 500 рублей. А если
итоговая оценка ниже 4, то стипендию вы не получаете. Эту задачу можно записать следующим
образом.
метод
;
Скрипт()
пер Оценка = 4
пер Стипендия = Оценка
>= 4 ? 3500 : 0

6.

Булевы операции
Теперь можно познакомиться с самыми интересными логическими операциями. Кроме операций
сравнения есть ещё группа логических операций, которые называются булевы операции.
Если операции сравнения можно было выполнять в основном над числами, строками и датами, то
булевы операции выполняются только со значениями типа Булево. То есть со значениями Истина и
Ложь.
Для этих примеров вам понадобится записывать булевы значения прямо в тексте скрипта, то есть
использовать литералы. Литералы типа Булево выглядят просто. Значение Истина обозначается
Истина, а значение Ложь обозначается Ложь.
Например, чтобы создать переменную, которая будет описывать погоду за окном, можно написать так.
метод
Скрипт()
пер СегодняСолнечно
= Истина
;
Если в другой переменной вы хотите уточнить, есть на улице дождь или нет, можно написать так.
метод
;
Скрипт()
пер СегодняСолнечно = Истина
пер ИдетДождь = Ложь

7.

Булевы операции
Логическое «и»
Чтобы познакомиться с первой булевой операцией, создайте две переменные: ЯУмеюПлавать и
РядомЕстьМоре. Задайте им те значения, которые есть на самом деле. Здесь, для примера, они будут
иметь значение Истина.
метод
Скрипт()
пер ЯУмеюПлавать = Истина
пер РядомЕстьМоре = Истина
;
Теперь вам нужно с помощью логической операции узнать, будете вы плавать в море или нет.
Сначала попробуйте сказать это обычными словами. Наверное, получится что-то вроде: «Если я умею
плавать и если рядом есть море, то тогда я буду плавать в море».
Теперь посмотрите, как эта же фраза выглядит на «1С:Элементе».
метод
;
Скрипт()
пер ЯУмеюПлавать = Истина
пер РядомЕстьМоре = Истина
пер ЯБудуПлаватьВМоре = ЯУмеюПлавать
и
РядомЕстьМоре

8.

Булевы операции
Чтобы сказать то же самое на «1С:Элементе», используется операция логическое и. Как она работает,
вы можете проверить сами на этом примере. Запустите его в отладке, измените значения переменных.
Плавать в море вы будете только в том случае, когда оно есть рядом и вы умеете плавать. Если моря
рядом нет, то плавать просто негде. Если вы не умеете плавать, то у вас тоже ничего не получится. Это
очень опасно, вы можете утонуть. Ну, а если и моря нет и плавать вы не умеете, то тем более
поплавать в море вам не удастся.
Операция логическое и возвращает значение Истина только в том случае, когда оба операнда имеют
Истина . Во всех остальных случаях она возвращает значение Ложь .
Для обозначения операции логическое и используется русская буква «и». Эта буква строчная,
поскольку это зарезервированное слово, а в «1С:Элементе» все зарезервированные слова пишутся
строчными буквами.

9.

Булевы операции
Логическое «или»
Теперь решите другую задачу. Создайте две переменные УМеняЕстьЛодка и УМеняЕстьПлот. Можете
задать им любые значения. Здесь, для примера, они будут иметь значение Истина .
метод
Скрипт()
пер УМеняЕстьЛодка = Истина
пер УМеняЕстьПлот = Истина
;
Вам нужно с помощью логической операции узнать, сможете вы переплыть через озеро или нет
Сначала попробуйте сказать это обычными словами. Наверное, получится что-то вроде: «Если у меня
есть плот или лодка, то я могу переплыть через озеро».
А теперь посмотрите, как эта же фраза выглядит на «1С:Элементе».
метод
;
Скрипт()
пер УМеняЕстьЛодка = Истина
пер УМеняЕстьПлот = Истина
пер ЯМогуПереплытьЧерезОзеро
= УМеняЕстьЛодка
или
УМеняЕстьПлот

10.

Булевы операции
Чтобы сказать то же самое на «1С:Элементе», используется операция логическое или. Как она
работает, вы можете проверить сами на этом примере, изменив значения переменных.
Если у вас есть лодка, вы можете переплыть через озеро? Да.
Если у вас не лодка, а плот, тогда сможете? Да, сможете.
А если у вас есть и лодка, и плот? Конечно! Даже два раза! Один раз на лодке, а другой — на плоту.
А в каком случае вам не удастся переплыть через озеро? Правильно. Когда у вас нет ни лодки, ни
плота.
Операция логическое или работает аналогично операции логическое и, только в отношении
значения Ложь . Она возвращает Ложь только в том случае, когда оба операнда имеют значение Ложь
Во всех остальных случаях она возвращает значение Истина .

11.

Совмещение операций
Усложните пример и познакомьтесь с тем, что в одном выражении могут использоваться сразу несколько
булевых операций. Создайте три переменные: ЯУмеюПлавать, РядомЕстьМоре и РядомЕстьБассейн. Задайте
им те значения, которые есть на самом деле. Здесь, для примера, они снова будут иметь значение Истина.
метод
Скрипт()
пер ЯУмеюПлавать = Истина
пер РядомЕстьМоре = Истина
пер РядомЕстьБассейн = Истина
;
Вопрос, решением которого вы займётесь, будет практически тем же самым. Чему будет равна
переменная ЯБудуПлавать?
Если вы будете отвечать словами, то скажете: «Я буду плавать, если я умею плавать и рядом есть море
или бассейн». Попробуйте записать это на «1С:Элементе».
метод
;
Скрипт()
пер ЯУмеюПлавать = Истина
пер РядомЕстьМоре = Истина
пер РядомЕстьБассейн = Истина
пер ЯБудуПлавать = ЯУмеюПлавать
и
РядомЕстьМоре
или
РядомЕстьБассейн

12.

Совмещение операций
Например, вы не умеете плавать. В этом случае неважно, есть рядом бассейн или нет, плавать вы не
должны. Но что говорит вам скрипт? Попробуйте.
метод
Скрипт()
пер ЯУмеюПлавать = Ложь
пер РядомЕстьМоре = Истина
пер РядомЕстьБассейн = Истина
пер ЯБудуПлавать = ЯУмеюПлавать
и
РядомЕстьМоре
или
РядомЕстьБассейн
;
Просто вы не учли, что если несколько булевых операций встречаются в одном выражении, то у них
есть определённый порядок выполнения. Точно так же, как было с арифметическими операциями «+»,
«-», «*» и «/».

13.

Совмещение операций
Сначала выполняется операция логическое и, а затем уже выполняется операция логическое или.
Если подряд встречаются несколько одинаковых операций, то они выполняются в той
последовательности, в которой написаны.
Поэтому в примере выражение было посчитано таким образом.

14.

Совмещение операций
Поэтому правильным решением будет РядомЕстьМоре или РядомЕстьБассейн заключить в скобки.
Попробуйте.
метод
Скрипт()
пер ЯУмеюПлавать = Ложь
пер РядомЕстьМоре = Истина
пер РядомЕстьБассейн = Истина
пер ЯБудуПлавать = ЯУмеюПлавать
и
(РядомЕстьМоре
или
РядомЕстьБассейн)
;
Тогда «1С:Элемент» сначала вычислит то выражение, которое в скобках. То есть узнает, есть где
плавать или плавать негде. Потом уже он поинтересуется вашим умением плавать.

15.

Совмещение операций
Поэтому правильным решением будет РядомЕстьМоре или РядомЕстьБассейн заключить в скобки.
Попробуйте.
метод
Скрипт()
пер ЯУмеюПлавать = Ложь
пер РядомЕстьМоре = Истина
пер РядомЕстьБассейн = Истина
пер ЯБудуПлавать = ЯУмеюПлавать
и
(РядомЕстьМоре
или
РядомЕстьБассейн)
;
Тогда «1С:Элемент» сначала вычислит то выражение, которое в скобках. То есть узнает, есть где
плавать или плавать негде. Потом уже он поинтересуется вашим умением плавать.

16.

Совмещение операций
Чтобы закрепить этот пример, измените его условие. Создайте три переменные: ЯУмеюПлавать,
РядомЕстьМоре и РядомЕстьВанна. Задайте им те значения, которые были в последнем примере:
Ложь, Истина, Истина
метод
Скрипт()
пер ЯУмеюПлавать = Ложь
пер РядомЕстьМоре = Истина
пер РядомЕстьВанна = Истина
;
Вычислить нужно переменную, которая называется ЯБудуКупаться. Будьте внимательны: имя
переменной изменилось не просто так.
Попробуйте записать выражение на «1С:Элементе» и потом сравните с тем, что ниже.
метод
;
Скрипт()
пер ЯУмеюПлавать = Ложь
пер РядомЕстьМоре = Истина
пер РядомЕстьВанна = Истина
пер ЯБудуКупаться = ЯУмеюПлавать
и
РядомЕстьМоре
или
РядомЕстьВанна

17.

Совмещение операций
Почему в этом случае скобки не понадобились, хотя пример внешне очень похож на предыдущий?
Скобки не понадобились потому, что «естественный» порядок выполнения логических операций в
этом выражении вполне вас устраивает.

18.

Логическое «не»
В заключение нужно сказать ещё об одной булевой операции — операции логическое не. Она очень
простая. Она возвращает булево значение, противоположное тому, которое имеется.
Чтобы посмотреть, как она работает, вы можете использовать такой пример.
метод
Скрипт()
пер ПасмурнаяПогода
пер СолнечнаяПогода
= Истина
= не ПасмурнаяПогода
;
Обычно с использованием этой операции никаких трудностей не возникает. Единственное, что может
вам
понадобиться, это порядок выполнения булевых операций. Полностью он выглядит так:
• сначала выполняется то, что в скобках;
• затем операция логическое не;
• затем операция логическое и;
• затем операция логическое или

19.

Практические задачи
Задача 1.
Чтобы по пути на работу защититься от дождя, вы берёте с собой зонт. С помощью переменных
ЯИдуНаРаботу и ИдетДождь вычислите значение переменной НадоВзятьЗонт. Проверьте, что ваша
инструкция правильно работает при любых значениях исходных переменных.
Задача 2.
В каких случаях вы не ходите в школу? Когда выходной (праздники, каникулы) и когда вы болеете. С
помощью переменных СегодняВыходной и ЯБолею вычислите значение переменной ЯНеИдуВШколу.
Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных.
Задача 3.
В хорошую погоду, когда у вас нет занятий, вы всегда идёте гулять. С помощью переменных
ХорошаяПогода, СегодняВыходной и СегодняПраздник вычислите значение переменной ЯИдуГулять.
Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных.
English     Русский Rules