false и true что это
Простые логические выражения
Для того, чтобы программа была не линейной (т.е. в зависимости от ситуации выполнялись разные инструкции) в языках программирования используются логические выражения, результат которых может быть либо правдой (true), либо ложью (false). Результат логических выражений обычно используют для определения пути выполнения программы.
Простые логические выражения являются результатом операций отношения между двумя операндами (значениями). В примерах ниже операндами являются значения переменных x и y. Операндами могут быть числа, символы и другие типы данных. Все что можно сравнивать между собой. Однако не рекомендуют сравнивать вещественные числа из-за особенностей их хранения в памяти компьютера.
В Паскале предусмотрены следующие операторы отношений:
Булевы типы
Стандартные булевские функции
В остальных случаях эти функции принимают значение false.
Некоторые значения нужно знать – потому, что без них никак и это значения — true, false, null. И когда вы начнете писать код, то вам нужно знать, что может возвращать функция, либо переменная и т.д.
И функции, кстати все возвращают разные значения! Запомнить это практически невозможно, поэтому не стоит пытаться запомнить, что из трех — true, false, null, она возвращает — для это есть справочники! К которым я периодически все равно обращаюсь!
Что такое false и true
Это как ответ, да и нет! Вы сегодня ели – да(true) — нет(false).
Что такое null
Это конечно очень хорошо, что пишут в учебниках и сайтах, но чаще всего они даже не показывают примеры, как это должно работать и как вообще этими тремя значениями пользоваться…
Если совсем по простому, то null = пустота, false =0, true = 1. Но иногда это и не так…
Но давайте наконец разберемся, что к чему!
И сделаем несколько проверок, который нам помогут понять:
Примеры использования и проверки true, false, null
С начала скажем, что означает два равно и три равно, и их тоже будем применять!
== означает равны по значению === означает равны по значению и типу
Первое – начнём с простого… и да. Чтобы понять, что у нас в переменной, будем использовать функцию var_dump, о катрой мы еще не писали. и условия тоже. но как говориться. сейчас без этого никак.
Примеры использования и проверки на true.
Вывод, что единица — будет true только по значению, но не по типу. и это число(int) из одного знака.
Следующий эксперимент, с true присвоим значение слово «да» в нашу переменную
Здесь мы видим аналогичный результат, что наша переменная true по значению, но не по типу, и это строка — состоящая, и обратите внимание, что строка состоит из 4 знаков — вопрос на засыпку, а почему не два знака, ведь «да» — это два знака. и кавычки — он точно нет посчитал.
true-false questions — «да-нет» вопросы
Смотреть что такое «true-false» в других словарях:
true-false — adjective offering a series of statements each of which is to be judged as true or false a true false test • Ant: ↑multiple choice * * * true false «TROO FLS», adjective. having to do with or containing statements which must be marked as either… … Useful english dictionary
true-false test — true′ false′ test n. edu a test requiring one to mark statements as either true or false • Etymology: 1920–25 … From formal English to slang
true-false test — ☆ true false test [tro͞o′fôls′ ] n. a test, as one typically given in school, consisting of a series of statements to be >English World dictionary
True/False Film Festival — Infobox Film Festival name = True/False Film Festival caption = opening = closing = awardsreceived = awardsgiven = films = directors = producers = writers = starring = host = Ragtag Programming for Film and Media Art date = number = 40 50… … Wikipedia
true-false test — (ˈ) ̷ ̷ˈ ̷ ̷ noun : an objective test consisting of a series of statements each of which is to be marked as either true or false * * * /trooh fawls /, Educ. a test requiring one to mark statements as true or false. [1920 25] * * * n. a test… … Useful english dictionary
true-false test — noun Date: 1924 a test consisting of a series of statements to be marked as true or false … New Collegiate Dictionary
true-false test — /trooh fawls /, Educ. a test requiring one to mark statements as true or false. [1920 25] * * * … Universalium
False — is the antonym of the adjective true.False is the 2nd album of Gorefest, False (album).False may also refer to: * FALSE, an esoteric stack oriented programming language * false, a Unix utilityee also* Contradiction * Falsity * Lie * Falsework, a… … Wikipedia
true-falsetest — true false test (tro͞oʹfôlsʹ) n. A test in which statements are to be marked either true or false. * * * … Universalium
Эта статья посвящена особенностям работы механизмов приведения типов в JavaScript. Начнём мы её со списка выражений, результаты вычисления которых могут выглядеть совершенно неожиданными. Вы можете испытать себя, попытавшись найти значения этих выражений, не подглядывая в конец статьи, где будет приведён их разбор.
Проверь себя
Вот список интересных выражений, о которых мы только что говорили:
Тут полно такого, что выглядит более чем странно, но без проблем работает в JS, задействуя неявное приведение типов. В подавляющем большинстве случаев неявного приведения типов в JS лучше всего избегать. Рассматривайте этот список как упражнение для проверки ваших знаний о том, как работает приведение типов в JavaScript. Если же тут для вас ничего нового не нашлось — загляните на wtfjs.com.
JavaScript полон странностей
Неявное преобразование типов и явное преобразование типов
Неявное преобразование типов — палка о двух концах: это источник путаницы и ошибок, но это и полезный механизм, который позволяет писать меньше кода без потери его читабельности.
Три вида преобразования типов
Первая особенность работы с типами в JS, о которой нужно знать, заключается в том, что здесь есть только три вида преобразований:
Примитивные типы данных
▍Преобразование к типу String
Все примитивные типы преобразуются в строки вполне естественным и ожидаемым образом:
В случае с типом Symbol дело несколько усложняется, так как значения этого типа можно преобразовать к строковому типу только явно. Здесь можно почитать подробности о правилах преобразования типа Symbol.
▍Преобразование к типу Boolean
Обратите внимание на то, что операторы, вроде || и && выполняют преобразование значений к логическому типу для внутренних целей, а возвращают значения исходных операндов, даже если они не являются логическими.
▍Преобразование к типу Number
Неявное приведение значения к числовому типу — тема более сложная, так как оно применяется, пожалуй, чаще чем преобразование в строку или в логическое значение. А именно, преобразование к типу Number выполняют следующие операторы:
Вот как в числа преобразуются примитивные значения:
Вот два особых правила, которые стоит запомнить:
При применении оператора == к null или undefined преобразования в число не производится. Значение null равно только null или undefined и не равно ничему больше.
Значение NaN не равно ничему, включая себя. В следующем примере, если значение не равно самому себе, значит мы имеем дело с NaN
Преобразование типов для объектов
Вот псевдо-реализация метода [[ToPrimitive]] :
В целом, работа алгоритма выглядит следующим образом:
Вот пример поведения Date при преобразовании типов:
Стандартные методы toString() и valueOf() можно переопределить для того, чтобы вмешаться в логику преобразования объекта в примитивные значения.
Метод Symbol.toPrimitive ES6
Разбор примеров
Вооружённые теорией, вернёмся к выражениям, приведённым в начале материала. Вот каковы результаты вычисления этих выражений:
Разберём каждый из этих примеров.
▍true + false
Оператор + с двумя операндами вызывает преобразование к числу для true и false :
▍12 / ‘6’
▍«number» + 15 + 3
▍15 + 3 + «number»
▍[1] > null
Оператор сравнения > выполняет числовое сравнение [1] и null :
▍«foo» + + «bar»
▍’true’ == true и false == ‘false’
▍[] + null + 1
Логические операторы || и && в процессе работы приводят значение операндов к логическому типу, но возвращают исходные операнды (которые имеют тип, отличный от логического). Значение 0 ложно, а значение ‘0’ истинно, так как является непустой строкой. Пустой объект <> так же преобразуется к истинному значению.
▍[1,2,3] == [1,2,3]
Этот пример лучше объяснить пошагово в соответствии с порядком выполнения операций.
▍new Date(0) — 0
▍new Date(0) + 0
Итоги
Преобразование типов — это один из базовых механизмом JavaScript, знание которого является основой продуктивной работы. Надеемся, сегодняшний материал помог тем, кто не очень хорошо разбирался в неявном преобразовании типов, расставить всё по своим местам, а тем, кто уверенно, с первого раза, никуда не подсматривая, смог решить «вступительную задачу», позволил вспомнить какой-нибудь интересный случай из их практики.
Уважаемые читатели! А в вашей практике случалось так, чтобы путаница с неявным преобразованием типов в JavaScript приводила к таинственным ошибкам?
Значения true, false, null пример
Подробно о true, false, null
Что такое false и true
Чтобы понять, что такое false и true проделаем пару манипуляций!
Если «ноль» равен «false», то выведем на экран «0 == false»:
Давайте это условие разместим прямо здесь, смотрим результат выполнения php программы:
Теперь сравним 1 и true.
Создадим теперь второе условие и используем «1» и «true», если «1» равен «true», то выведем на экран 1 == true.
Прямо здесь давайте разместим это условие:
Обращаю ваше внимание!
Если в первой части у вас не возникло проблем с пониманием написанного, то мы можем сделать следующий шаг!
Как вы знаете, есть :
И выведем прямо здесь :
Вывод о «0» и «false»
Но не равны по типу.
Чтобы разобраться с типом нам понадобится функция var_dump:
Выведем прямо здесь:
И такое же проделаем с false
Вывод о типах «0» и «false»
Вывод о «1» и «true»
Надеюсь, что вы поняли что такое true и false
Если же нет, то рекомендую читать этот пункт, пока у вас не настанет прояснение!
Проверим переменные на true.
Несколько примеров и проверок на «true».
Некоторые примеры похожи на примеры из первого пункта, но и могут отличаться!
Сверху пытался максимально просто объяснить, что такое «true».
Проверим число 1 на true.
Результат проверки числа на true
Проверим число 0 на true.
Конечно же я знаю, какой будет результат, но для вас не очевидно!
Давайте проверим число «0» на true.
Нам опять понадобится:
Заметка про NULL
Основные положения
Для удобства сделаем процедуру, печатающую состояние булевого параметра:
и включим опцию печати сообщений на консоль:
Привычные операторы сравнения пасуют перед NULLом:
Сравнение с NULLом
Соответственно, IS NOT NULL действует наоборот: вернёт истину, если значение операнда отлично от NULLа и ложь, если он является NULLом:
DECODE идёт против системы:
Пример с составными индексами находится в параграфе про индексы.
Логические операции и NULL
В большинстве случаев неизвестный результат обрабатывается как ЛОЖЬ :
Отрицание неизвестности даёт неизвестность:
Операторы IN и NOT IN
Для начала сделаем несколько предварительных действий. Для тестов создадим таблицу T с одним числовым столбцом A и четырьмя строками: 1, 2, 3 и NULL
Включим трассировку запроса (для этого надо обладать ролью PLUSTRACE ).
В листингах от трассировки оставлена только часть filter, чтобы показать, во что разворачиваются указанные в запросе условия.
Предварительные действия закончены, давайте теперь поработаем с операторами. Попробуем выбрать все записи, которые входят в набор (1, 2, NULL) :
Попробуем теперь с NOT IN :
Вообще ни одной записи! Давайте разберёмся, почему тройка не попала в результаты запроса. Посчитаем вручную фильтр, который применила СУБД, для случая A=3 :
Из-за особенностей трёхзначной логики NOT IN вообще не дружит с NULLами: как только NULL попал в условия отбора, данных не ждите.
NULL и пустая строка
Здесь Oracle отходит от стандарта ANSI SQL и провозглашает эквивалентность NULLа и пустой строки. Это, пожалуй, одна из наиболее спорных фич, которая время от времени рождает многостраничные обсуждения с переходом на личности, поливанием друг друга фекалиями и прочими непременными атрибутами жёстких споров. Судя по документации, Oracle и сам бы не прочь изменить эту ситуацию (там сказано, что хоть сейчас пустая строка и обрабатывается как NULL, в будущих релизах это может измениться), но на сегодняшний день под эту СУБД написано такое колоссальное количество кода, что взять и поменять поведение системы вряд ли реально. Тем более, говорить об этом они начали как минимум с седьмой версии СУБД (1992-1996 годы), а сейчас уже двенадцатая на подходе.
NULL и пустая строка эквивалентны:
непременный атрибут жёсткого спора:
Длина пустой строки не определена:
Сравнение с пустой строкой невозможно:
Критики подхода, предлагаемого Ораклом, говорят о том, что пустая строка не обязательно обозначает неизвестность. Например, менеджер по продажам заполняет карточку клиента. Он может указать его контактный телефон (555-123456), может указать, что он неизвестен (NULL), а может и указать, что контактный телефон отсутствует (пустая строка). С оракловым способом хранения пустых строк реализовать последний вариант будет проблемно. С точки зрения семантики довод правильный, но у меня на него всегда возникает вопрос, полного ответа на который я так и не получил: как менеджер введёт в поле «телефон» пустую строку и как он в дальнейшем отличит его от NULLа? Варианты, конечно, есть, но всё-таки…
Вообще-то, если говорить про PL/SQL, то где-то глубоко внутри его движка пустая строка и NULL различаются. Один из способов увидеть это связан с тем, что ассоциативные коллекции позволяют сохранить элемент с индексом » (пустая строка), но не позволяют сохранить элемент с индексом NULL:
Использовать такие финты ушами на практике не стоит. Во избежание проблем лучше усвоить правило из доки: пустая строка и NULL в оракле неразличимы.
Математика NULLа
Этот маленький абзац писался пятничным вечером под пиво, на фоне пятничного РЕН-ТВшного фильма. Переписывать его лень, уж извините.
Очевидно, что мы ничем не сможем помочь Коле: неизвестное количество любовников Маши до замужества сводит все расчёты к одному значению — неизвестно. Oracle, хоть и назвался оракулом, в этом вопросе уходит не дальше, чем участники битвы экстрасенсов: он даёт очевидные ответы только на очевидные вопросы. Хотя, надо признать, что Oracle гораздо честнее: в случае с Колей он не будет заниматься психоанализом и сразу скажет: «я не знаю»:
С конкатенацией дела обстоят по другому: вы можете добавить NULL к строке и это её не изменит. Такая вот политика двойных стандартов.
NULL и агрегатные функции
Таблица с данными. Используется ниже много раз:
Пустые значения игнорируются агрегатами:
Набор данных только из NULLов:
Пустой набор данных:
NULL в OLAP
Удобная фишка sqlplus: при выводе данных заменяет NULL на указанную строку:
Проверяем дуализм NULLа в многомерном кубе:
Чему равно такое выражение false null true
Пожалуйста обратите внимание, что в СУБД Firebird версий до 2.0 чаще всего недопустимо прямое использование константы NULL в операциях и сравнениях. Если вы видите NULL в приведенных ниже выражениях, понимайте это как « значение поля, переменной или другого выражения, результат вычисления которого есть NULL ».
Выражения, возвращающие NULL
Выражения в этом списке всегда возвратят NULL :
‘Home ‘ || ‘sweet ‘ || NULL
NULL в логических выражениях
NULL or false = NULL
NULL or true = true
NULL or NULL = NULL
NULL and false = false
NULL and true = NULL
NULL and NULL = NULL
Все эти результаты находятся в соответствии с булевой логикой. Факт состоит в том, что в порядке вычисления « X or true » и « X and false » вам просто нет необходимости знать значение X, что так же базируется на известной особенности, которую мы знаем в различных языках программирования под названием « сокращенное (ускоренное) вычисление булевых выражений ».
Больше логики (или нет)
Полученные выше результаты сокращенного вычисления могут привести вас к следующим идеям:
Пустая строка располагается лексикографически перед любой другой строкой. Поэтому, S >= » равно true не зависимо от значения S.
Как это реализовано в СУБД Firebird? Что ж, мне очень жаль, но я должен сообщить вам, что, несмотря на такую неотразимую логику и аналогию с результатами булевых операций, описанных выше, следующие выражения всегда дают в итоге NULL :
A = A (если A является полем или переменной со значением NULL )
Это сделано, чтобы быть последовательными.
NULL в агрегатных функциях
ID | Name | Amount |
---|---|---|
1 | John | 37 |
2 | Jack | NULL > |
3 | Joe | 5 |
4 | Josh | 12 |
5 | Jay | NULL > |