Неизменяемость по умолчанию
В Rust переменные по умолчанию неизменяемы. Это осознанное дизайнерское решение, которое помогает предотвращать ошибки. Используйте mut, чтобы сделать переменную изменяемой:
let x = 5; // неизменяемая
// x = 6; // ❌ ошибка компиляции!
let mut y = 5; // изменяемая
y = 6; // ✅ ok
println!("{}", y); // 6
Константы
const MAX_POINTS: u32 = 100_000;
const PI: f64 = 3.14159265358979;
// Константы всегда неизменяемы, должны иметь явное указание типа
// и могут быть объявлены в любой области видимости
Затенение (Shadowing)
Можно объявить новую переменную с тем же именем — новая переменная затеняет старую:
let x = 5;
let x = x + 1; // затеняет предыдущий x
let x = x * 2; // затеняет снова
println!("{}", x); // 12
// Затенение позволяет менять тип!
let spaces = " "; // &str
let spaces = spaces.len(); // usize
Скалярные типы
let i: i32 = -42; // знаковое целое (i8, i16, i32, i64, i128)
let u: u64 = 1_000_000; // беззнаковое целое (u8, u16, u32, u64, u128)
let f: f64 = 3.14; // число с плавающей точкой (f32, f64)
let b: bool = true; // булево значение
let c: char = 'Z'; // символ (4 байта, скалярное значение Unicode)
Составные типы
// Кортеж — фиксированный размер, можно смешивать типы
let tup: (i32, f64, bool) = (500, 6.4, true);
let (x, y, z) = tup; // деструктуризация
println!("{}", tup.0); // доступ по индексу: 500
// Массив — фиксированный размер, один тип
let arr: [i32; 5] = [1, 2, 3, 4, 5];
println!("{}", arr[0]); // 1
let zeros = [0; 3]; // [0, 0, 0]