Уроки · 6
Переменные
Прежде чем двигаться дальше, остановимся на секунду и разберём один приём, который уже пригодился в уроке “Ввод с клавиатуры”, но остался без объяснения.
В уроке “Ввод с клавиатуры” код выглядел так:
// Стрелка вверх зажата — рисуем круг.if is_key_down(KeyCode::Up) { draw_circle(screen_width() / 2.0, screen_height() / 2.0, 100.0, YELLOW);}screen_width() и screen_height() возвращают ширину и высоту
игрового окна в пикселях. Запись получается длинной: два похожих
выражения подряд внутри одного вызова draw_circle, и с первого
взгляда не всегда понятно, где тут что.
Переменная
Заголовок раздела «Переменная»Можно дать каждому вычисленному значению своё имя — и вызов
draw_circle станет короче и понятнее:
// Ширина экрана, поделённая пополам — центр по горизонтали.let center_x = screen_width() / 2.0;Разберём по кусочкам. let — ключевое слово: слово, уже занятое Rust
под особый смысл — “дальше будет новая переменная”. Оно всегда одно и
то же и придумано не нами, поэтому его нельзя взять как имя для своей
переменной — Rust решит, что это снова та самая команда, а не имя.
После него через пробел — имя, какое захочешь, здесь это center_x. А
= — не “равно” из математики, а оператор присваивания: “посчитай
то, что справа, и положи результат в то, что слева”.
Переменную проще всего представить как контейнер для значения —
ячейку, корзинку, коробку, называй как удобнее. Присваивание кладёт
значение внутрь, а имя — это подпись на контейнере: по ней его и
отличают от остальных. Дальше по коду достаточно написать имя —
center_x — и оттуда возьмётся то же самое значение, не переписывая
выражение целиком заново.
Применяем к нашему коду
Заголовок раздела «Применяем к нашему коду»Замени содержимое src/main.rs на это:
use macroquad::prelude::*;
#[macroquad::main("Ввод с клавиатуры")]async fn main() { loop { clear_background(BLACK);
// Стрелка вверх зажата — рисуем круг по центру экрана. if is_key_down(KeyCode::Up) { let center_x = screen_width() / 2.0; let center_y = screen_height() / 2.0; draw_circle(center_x, center_y, 100.0, YELLOW); }
next_frame().await; }}На экране ничего не изменилось — тот же кружок по той же клавише:
Что здесь происходит
Заголовок раздела «Что здесь происходит»center_xиcenter_yобъявлены прямо внутриif, рядом с местом, где используются —draw_circle(center_x, center_y, ...)читается проще, чемdraw_circle(screen_width() / 2.0, screen_height() / 2.0, ...).center_xиcenter_y— обычные переменные, безmut: значение, которое они получили, дальше не меняется.
Называть так значение стоит, когда это реально помогает — выражение
длинное или повторяется несколько раз. Это не обязательное правило:
если выражение короткое и используется один раз, как screen_width() / 2.0 сам по себе, отдельная переменная ради него не нужна.