Перейти к содержимому

Уроки · 40

Тип bool

В уроке «Порядок отрисовки» появился bool — значение типа true/false. Разберёмся с ним подробнее.

bool — самый простой тип из всех, что мы видели. У f32 очень много возможных значений — считай, любое число с дробной частью. А у bool их всего два: true (да) и false (нет). Никаких чисел, никакого текста — просто ответ на вопрос, да или нет, верно или неверно, случилось или не случилось.

if внутри себя всегда ждёт bool. Проще всего это увидеть на самих true и false:

if true {
// выполнится всегда — тут внутри буквально "да"
}
if false {
// не выполнится никогда — тут внутри буквально "нет"
}

Писать так в реальном коде, конечно, незачем — результат и без запуска известен заранее. Но это показывает главное: if не делает никакой магии, он просто смотрит на 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, откуда бы он ни взялся.