Уроки · 40
Тип bool
В уроке «Порядок отрисовки» появился bool —
значение типа true/false. Разберёмся с ним подробнее.
Что такое bool
Заголовок раздела «Что такое bool»bool — самый простой тип из всех, что мы видели. У f32 очень
много возможных значений — считай, любое число с дробной частью. А у
bool их всего два: true (да) и false (нет). Никаких чисел, никакого
текста — просто ответ на вопрос, да или нет, верно или неверно,
случилось или не случилось.
if проверяет именно bool
Заголовок раздела «if проверяет именно bool»if внутри себя всегда ждёт bool. Проще всего это увидеть на самих
true и false:
if true { // выполнится всегда — тут внутри буквально "да"}
if false { // не выполнится никогда — тут внутри буквально "нет"}Писать так в реальном коде, конечно, незачем — результат и без
запуска известен заранее. Но это показывает главное: if не делает
никакой магии, он просто смотрит на bool внутри скобок и решает,
выполнять тело или нет.
Все прошлые проверки — тоже bool
Заголовок раздела «Все прошлые проверки — тоже bool»До сих пор внутри if у нас никогда не было буквально true или
false — были вызовы функций и сравнения вроде
is_key_down(KeyCode::Up) или distance < RADIUS. Но результат у
них ровно тот же: каждая такая проверка возвращает bool — свой
собственный ответ «да» или «нет» — и именно поэтому вообще может
стоять внутри if.
Это легко показать: результат такой проверки можно, как и любое
другое значение, сначала сохранить в переменную, а уже потом
передать в if — совсем как мы делали с small_on_top в уроке
«Порядок отрисовки».
Например, is_key_down из урока «Ввод с клавиатуры»:
let up_pressed = is_key_down(KeyCode::Up);if up_pressed { // ...}Или is_mouse_button_down из урока «Клик мышью»:
let clicking = is_mouse_button_down(MouseButton::Left);if clicking { // ...}Или сравнение distance < RADIUS из урока «Радиус
обнаружения»:
let close_enough = distance < RADIUS;if close_enough { // ...}В каждом случае переменная (up_pressed, clicking,
close_enough) — самый обычный bool, ничем не отличающийся от
true или false из первого примера. if смотрит только на этот
bool и понятия не имеет, откуда он взялся — из нажатой клавиши, из
клика мышью или из сравнения чисел. Ему всё равно: bool — значит
можно проверять.
Что здесь происходит
Заголовок раздела «Что здесь происходит»bool— тип с ровно двумя значениями,trueиfalse, без чисел и текста.if true { ... }выполняется всегда,if false { ... }— никогда:ifпросто смотрит наboolвнутри скобок.is_key_down,is_mouse_button_down,is_mouse_button_pressed,is_mouse_button_released— все функции проверки ввода, которые встречались раньше, возвращаютbool.- Сравнения вроде
distance < RADIUSилиdistance > 0.0— тоже обычные выражения, которые вычисляются вbool, а не какая-то особая частьif. - Результат любой такой проверки можно сохранить в переменную заранее
и передать в
ifотдельной строкой —ifот этого не меняется, потому что ему всегда нужен именноbool, откуда бы он ни взялся.