Уроки · 30
Тип f32
f32 уже несколько раз мелькало в коде без объяснения — в уроке
«Константы» (const SPEED: f32 = 8.0;), в уроке
«Свои функции» (-> (f32, f32)). Пора разобраться,
что это вообще такое.
Что такое тип
Заголовок раздела «Что такое тип»У любого значения в программе есть тип — ярлык, который говорит, что
это за значение и что с ним вообще можно делать. 10.0 и "привет" —
явно разные вещи: одно можно складывать и умножать, другое — нет. Тип
как раз и есть тот ярлык, который это различает.
f32 — число с дробной частью
Заголовок раздела «f32 — число с дробной частью»f32 — это тип для чисел вроде 10.0, 0.5, -3.7 — с точкой и
дробной частью. Именно такие числа нужны почти везде в игре: позиция
на экране, расстояние, доля от 0 до 1 — всё это редко бывает ровно
целым числом.
Такие числа называют “числами с плавающей точкой” — сама точка внутри
числа как бы не закреплена на одном месте, а “плавает”: в 3.14 она
стоит после первой цифры, в 0.001 — после трёх нулей. 32 в
названии — это про то, сколько места такое число занимает в памяти
компьютера; здесь достаточно знать, что это число само по себе особо
не влияет на то, как мы пишем код.
Почему у нас в коде всюду f32
Заголовок раздела «Почему у нас в коде всюду f32»Мы никогда раньше не писали слово f32 сами — и тем не менее все
наши числа были именно этого типа. Дело в том, что все функции
macroquad — screen_width(), draw_circle, mouse_position() —
устроены так, что ждут и возвращают именно f32. Когда мы пишем let x = 10.0;, а потом передаём x в draw_circle, Rust смотрит, как
x используется дальше, и сам выбирает подходящий тип — здесь это
f32, потому что именно его ждёт draw_circle. Мы не называем тип
вслух, но он там есть с самого начала.
Почему у const тип пишут явно
Заголовок раздела «Почему у const тип пишут явно»А вот с const так не получается. Обычная переменная живёт в одном
конкретном месте кода, и Rust видит, как именно она используется
дальше — оттуда и берётся тип. Константу же можно использовать где
угодно в файле, в самых разных местах сразу, и единого “места
использования”, по которому угадать тип, просто нет. Поэтому у
const тип — обязательная часть объявления, а не подсказка: const SPEED: f32 = 8.0; без : f32 не скомпилируется.
Что здесь происходит
Заголовок раздела «Что здесь происходит»- Тип — это ярлык у значения: что оно такое и что с ним можно делать.
f32— число с дробной частью, ровно то, что нужно для позиций, расстояний и долей на экране.- Мы не писали
f32явно почти нигде — Rust сам подставлял этот тип, глядя, что наши числа передаются в функции macroquad, которые его ждут. - У
constтакого “места использования” нет, поэтому тип приходится писать явно, а не полагаться на то, что Rust его угадает.