Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Встроенные типы Rust

Что вы узнаете: фундаментальные типы Rust (i32, u64, f64, bool, char), вывод типов, явные аннотации типов и то, как они соотносятся с примитивными типами C/C++. Неявных преобразований нет — Rust требует явных приведений.

  • В Rust есть вывод типов, но допускается и явное указание типа
ОписаниеТипПример
Знаковые целыеi8, i16, i32, i64, i128, isize-1, 42, 1_00_000, 1_00_000i64
Беззнаковые целыеu8, u16, u32, u64, u128, usize0, 42, 42u32, 42u64
Числа с плавающей точкойf32, f640.0, 0.42
Unicodechar‘a’, ‘$’
Логическийbooltrue, false
  • Rust допускает произвольное использование _ между цифрами для удобства чтения

Указание типа и присваивание в Rust

  • Для присваивания значений переменным в Rust используется ключевое слово let. Тип переменной можно необязательно указать после :
fn main() {
    let x : i32 = 42;
    // Эти два присваивания логически эквивалентны
    let y : u32 = 42;
    let z = 42u32;
}
  • Параметры функций и возвращаемые значения (если есть) требуют явного указания типа. Следующая функция принимает параметр u8 и возвращает u32
#![allow(unused)]
fn main() {
fn foo(x : u8) -> u32
{
    return x as u32 * x as u32;
}
}
  • Неиспользуемые переменные помечаются префиксом _, чтобы не получать предупреждения компилятора

Указание типа и вывод типа в Rust

fn secret_of_life_u32(x : u32) {
    println!("The u32 secret_of_life is {}", x);
}

fn secret_of_life_u8(x : u8) {
    println!("The u8 secret_of_life is {}", x);
}

fn main() {
    let a = 42; // Ключевое слово let присваивает значение; тип a — u32
    let b = 42; // Ключевое слово let присваивает значение; выведенный тип b — u8
    secret_of_life_u32(a);
    secret_of_life_u8(b);
}

Переменные и изменяемость в Rust

  • Переменные в Rust по умолчанию неизменяемые, если не использовано ключевое слово mut, которое обозначает изменяемость переменной. Например, следующий код не скомпилируется, пока let a = 42 не будет заменено на let mut a = 42
fn main() {
    let a = 42; // Нужно заменить на let mut a = 42, чтобы разрешить присваивание ниже
    a = 43;  // Не скомпилируется, пока выше не внесено изменение
}
  • Rust допускает повторное использование имён переменных (затенение, shadowing)
fn main() {
    let a = 42;
    {
        let a = 43; //OK: Другая переменная с тем же именем
    }
    // a = 43; // Не допускается
    let a = 43; // Ок: новая переменная и присваивание
}