Что значит true и false
Перейти к содержимому

Что значит true и false

Операторы true и false (справочник по C#)

Оператор true возвращает значение true true , указывая, что его операнд имеет значение true. Оператор false возвращает значение bool true , указывая, что его операнд имеет значение false. Операторы true и false не обязательно дополняют друг друга. То есть оба оператора true и false могут вернуть значение bool false для одного операнда. Если тип определяет один из двух операторов, он должен также определять другой оператор.

Используйте тип bool? , если вам нужно использовать трехзначную логику (например, при работе с базами данных, которые поддерживают трехзначный логический тип). В C# предоставляются операторы & и | , которые поддерживают троичную логику с операндами bool? . См. подробнее о логических операторах, поддерживающих значение NULL в описании логических операторов.

Логические выражения

Тип с определенным оператором true может быть типом результата управляющего условного выражения в операторах true , do, while и for и условном операторе . Дополнительные сведения см. в описании логических выражений в спецификации языка C#.

Пользовательские условные логические операторы

Если тип с определенными операторами true и false true логические операторы false | или | & определенным образом, & || или || && соответственно могут вычисляться для операндов этого типа. Дополнительные сведения см. в разделе Пользовательские условные логические операторы в Спецификации языка C#.

Пример

В следующем примере представлен тип, который определяет операторы true и false . Этот тип также перегружает логический оператор И & таким образом, что оператор && может быть вычислен для операндов этого типа.

Условия и принятия решений — Введение в программирование

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

Смотрите, в математике есть концепция абсолютного значения. Оно определяется так:

Не беспокойтесь, это просто: если число положительное, то его абсолютное значение — это то же число; если число отрицательное, то его абсолютное значение — противоположное ему число. Проще говоря, отбросьте знак отрицания, если он есть, и всё.

Это можно представить в виде расстояния от нуля.

Допустим, вам требуется описать чёрный ящик — функцию, которая принимает число и возвращает его абсолютное значение. Вам потребуется создать правило внутри ящика, вроде этого:

Это условие и формально оно выглядит вот так:

Теперь давайте напишем настоящую функцию:

У этой функции один параметр — она принимает извне один аргумент. Затем идёт ключевое слово if , затем условие в скобках, затем — блок инструкций, который запускается, если аргумент отвечает условию. Следующее условие с else if . else if означает, что "если предыдущее условие не было удовлетворено, но это новое удовлетворено — перейти к выполнению следующего блока инструкций".

Таких блоков "else if" может быть несколько, иногда у вас есть множество альтернатив.

Теперь, когда мы разобрались с положительными и отрицательными числами, остался ещё один вариант: что, если у числа значение 0. Заметьте, мы не уточняем, что число явно 0, мы просто указываем else . Это значит "если ни одно из вышеуказанных условий не удовлетворяется, переходить к следующему блоку инструкций." Вы можете спокойно считать, что если число не положительное и не отрицательное, оно может быть только нулём. Но иногда мы совершаем ошибки, думая об условиях и альтернативах, а многие проблемы в программировании появляются из-за ошибочных условий.

Эти условия в скобках могут быть либо true (истина) либо false (ложь). Например, (num > 0) истинно, когда num равно 9 или 15, но ложно, если num имеет значение -18 или, скажем, 0.

Как вы видите математические знаки больше и меньше как бы отвечают ДА или НЕТ, ИСТИНА (true) или ЛОЖЬ (false). Есть другие выражения, которые дают ответы TRUE или FALSE:

Вот несколько примеров:

Область математики, которая изучает значения true и false называется Алгеброй логики. В целом, утверждения любого типа, не только относящиеся к числам, могут быть истинными или ложными. Например, "Я человек" это истина, а "Китай находится в Южной Америке" — ложь.

В JavaScript есть значения true и false , и их можно использовать в условиях. Например, вы можете ввести if true , и это условие всегда будет удовлетворяться, потому что true всегда истинно.

В Алгебре логики множество аспектов и деталей, но в программировании мы в основном фокусируемся на трёх примитивных операциях: AND, OR, NOT.

AND используется, когда вам нужно, чтобы два условия были истиной. "Я человек AND лошади едят траву" — true, потому что оба утверждения истинны. "Я человек AND свиньи могут летать" — false, потому что одно утверждение истинно, а другое ложно, и вся конструкция в этом случае, объединённая операцией AND — ложна.

Символ для AND — двойной амперсанд && . Эта так называемая таблица истинности для операции AND — своеобразная шпаргалка:

A B A AND B
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE

Так что только TRUE AND TRUE даёт TRUE, а все остальные комбинации содержат FALSE, поэтому их результат — FALSE.

OR используется, если вам нужно, чтобы хотя бы одно условие было true. Тот же пример, "Я человек OR лошади едят траву" — true. "Я человек OR свиньи могут летать" — тоже true. Хотя свиньи и не могут летать, я — человек, поэтому одно из этих двух утверждений — true, что делает всю конструкцию, объединённую OR, true.

Символ для OR — две вертикальных полоски || .

A B A OR B
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE

Если в конструкции присутствует true, значит результат true.

NOT — это просто — это противоположное. NOT true — это false, NOT false — это true. "NOT свиньи могут летать" — true, потому что "свиньи могут летать" — false, а не false — это true.

Символ для NOT — восклицательный знак ! .

A NOT A
TRUE FALSE
FALSE TRUE

В программировании обычно есть множество способов выполнения одной операции. Мы можем написать свою функцию абсолютного значения по-другому и получить тот же результат. Давайте попробуем это сделать, используя новые идеи:

Теперь у нас есть всего два условия:

  1. Если число имеет значение 0 ИЛИ число больше 0 , то возвращать само число.
  2. В любом другом случае возвращать -число.

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

Дополнение к уроку

Условия

Условие формально выглядит так:

JavaScript-функция, которая принимает значение и возвращает абсолютное значение:

Условие может быть либо истинным ( true ) либо ложным ( false ). Например, (num > 0) истинно, когда num равно 9 или 15, но ложно, когда num -18 или, скажем, 0.

То, что даёт ответ TRUE или FALSE, называется предикатом.

Математические предикаты в JavaScript:

Альтернативный способ реализации функции abs :

Можно придумать другой способ реализации той же функции, с использованием символа >= .

Та же функция значит: "назначение функции то же, но внутренность (реализация) может отличаться".

Тернарный оператор

В JavaScript и многих других языках есть сокращённая версия if: она называется тернарным оператором (ternary operator):

В этом случае есть только одно составное условие и два варианта: один для true и один для false.

Мы создаём absValue и присваиваем ему значение. Это значение зависит от условия: если условие истинно, тогда используется num , в противном случае используется -num .

Тернарная операция VS условная конструкция if

Между этими двумя элементами языка есть различия. Тернарная, или условная, операция вычисляет и возвращает значение, то есть является выражением. Это значит, что мы можем сохранить результат вычисления этого выражения в константе, например:

Условная конструкция if в JavaScript выражением НЕ является. Это инструкция — она выполняет действие, ничего не вычисляя и не возвращая. Как следствие, мы НЕ можем с помощью конструкции if сделать так же:

Такая строчка кода приведёт к ошибке. Кстати, в некоторых других языках, например в Ruby, if реализован как выражение, поэтому там подобное присваивание возможно.

Чтобы сделать то же самое, придётся "попотеть":

Как видно, код стал более громоздким и сложным. Более того, нам пришлось ввести изменяемое состояние — вместо константы const использовать переменную ( let ). То есть мы позволили всему остальному коду изменять значение absValue , хотя объективно это больше нигде не понадобится. Тем самым мы заложили потенциальную возможность для будущих ошибок.

Результат вычисления тернарной операции можно вернуть из функции, поставив её после инструкции return . Особенно хорошо она сочетается с функциями-однострочниками, когда надо вернуть то или иное значение в зависимости от логического условия:

Таким образом, тернарная операция позволяет писать более лаконичный и простой код. Но не стоит увлекаться, у неё есть свои минусы и ограничения по сравнению с конструкцией if , всё зависит от конкретной ситуации:

"Вложенные" тернарные операции выглядят эффектно, но ухудшают читабельность кода:

Тернарная операция не подойдёт, если в зависимости от условия надо выполнить несколько (а не одно выражение) строчек кода (блок кода). Нужна условная конструкция if :

Используя в теле функции, мы можем легко вернуть результат вычисления тернарника, поставив его после инструкции return . Ведь это обыкновенное выражение. Однако, инструкцию return нельзя использовать внутри тернарной операции. Интерпретатор вас не поймёт и выкинет ошибку:

Тип Boolean, логические операторы и операторы сравнения

Логический тип Boolean в JavaScript представляет одно из двух значений: true (истина) или false (ложь).

Значения Boolean

В программировании очень часто бывают ситуации, когда требуется тип данных, который может принимать одно значение из двух, вроде

  • ДА / НЕТ
  • ВКЛ / ВЫКЛ
  • ИСТИНА / ЛОЖЬ

Именно для этих случаев в JavaScript существует логический тип данных Boolean, который может принимать только значение true (истина) или false (ложь).

Функция Boolean()

Чтобы определить, является ли выражение (или переменная) истиной (возвращает значение true), можно воспользоваться функцией Boolean():

Или можно сделать еще проще:

Все имеет «значение» True или False

Любое значение отличное от 0 имеет логическое значение true.

Логическое значение 0 (ноль) — false.

Логическое значение -0 (минус ноль) — false.

Логическое значение «» (пустая строка) — false.

Логическое значение undefined — false.

Логическое значение null — false.

Логическое значение false — false.

Логическое значение NaN — false.

Значения типа Boolean могут быть объектами

Обычно, логические значения типа Boolean определяются примитивными литералами:

Однако, в JavaScript при помощи ключевого слова new логические значения также можно определить и как объекты:

Тем не менее, не определяйте значения типа Boolean как объекты. Это замедляет скорость выполнения скрипта. Кроме этого, ключевое слово new в данном случае усложняет код и может привести к неожиданным результатам:

При использовании оператора сравнения ==, одинаковые значения типа Boolean равны:

Однако, при использовании оператора сравнения ===, одинаковые значения типа Boolean не будут равными, потому что оператор === ожидает совпадения как по значению, так и по типу.

Или еще хуже. Объекты не сравниваются:

Обратите внимание на разницу между (x==y) и (x===y).

Сравнение двух объектов JavaScript всегда возвращает ложь (false).

Логические операторы и операторы сравнения

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

Значения типа Boolean лежат в основе всех сравнений и условий в JavaScript.

Операторы сравнения

Операторы сравнения используются в логических выражениях для определения совпадения или различия между переменными или значениями.

Предположим, что у нас есть x = 5. Следующая таблица объясняет операторы сравнения:

Оператор Описание Выражение Возвращает
== равно x == 8
x == 5
x == «5»
false
true
true
=== равно по значению и типу x === 5
x === «5»
true
false
!= не равно x != 8 true
!== не равно ни по значению, ни по типу x !== 8
x !== 5
x !== «5»
true
false
true
> больше чем x > 8 false
< меньше чем x < 8 true
>= больше или равно x >= 8 false
<= меньше или равно x <= 8 true

Как это можно использовать

Операторы сравнения используются в выражениях условий для сравнения значений и принятия решения в зависимости от полученного результата:

Подробнее об условных выражениях будет рассказано в следующей главе этого учебника.

Логические операторы

Логические операторы используются для определения логической связи между переменными или значениями.

Предположим, у нас есть x = 6 и y = 3. Следующая таблица объясняет логические операторы:

Оператор Описание Пример
&& И (x < 10 && y > 1) — true
|| ИЛИ (x == 5 || y == 5) — false
! НЕ !(x == y) — true

Оператор ! также используется для быстрого преобразования выражения к логическому значению:

Условный (тернарный) оператор

В JavaScript есть особый условный оператор, который присваивает переменной значение в зависимости от заданного условия.

имя_переменной = (условие) ? значение1 : значение2

В данном примере если в переменной age значение меньше 18, то переменной voteable будет присвоена строка «Слишком молод», в обратном случае переменной voteable будет присвоена строка «Возраст подходит».

Сравнение разных типов

Сравнение данных разного типа может привести к неожиданным результатам.

При сравнении строки и числа JavaScript будет преобразовывать строку в числовое значение. Пустая строка преобразуется в 0. Не числовая строка преобразуется в значение NaN, которое всегда равно false.

Выражение Значение
2 < 12 true
2 < «12» true
2 < «John» false
2 > «John» false
2 == «John» false
«2» < «12» false
«2» > «12» true
«2» == «12» false

При сравнении двух строк значение строки «2» будет больше значения строки «12», потому что в алфавитной последовательности 1 меньше 2.

Чтобы обезопасить результаты сравнения, переменные следует привести к надлежащему типу:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *