Примитивы

Rust предоставляет доступ к большому количеству примитивов:

Скалярные типы

  • знаковые целочисленные: i8, i16, i32, i64 и isize (размер указателя)
  • беззнаковые целочисленные: u8, u16, u32, u64 и usize (размер указателя)
  • вещественные: f32, f64
  • char скалярное значение Unicode, например: 'a', 'α' и '∞' (4 байта каждый)
  • bool: true или false
  • единичный тип (), значение которого так же ()

Несмотря на то, что значение единичного типа является кортежем, оно не считается составным типом, потому что не содержит нескольких значений.

Составные типы

  • массивы, например [1, 2, 3]
  • кортежи, например (1, true)

Переменные всегда должны быть аннотированы. Числам можно указать определённый тип с помощью суффикса, иначе будет присвоен тип по умолчанию. Целочисленные значения по умолчанию i32, а вещественные f64. Стоит заметить, что Rust также умеет выводить типы из контекста.

fn main() {
    // Переменные могут быть аннотированы.
    let logical: bool = true;

    let a_float: f64 = 1.0;  // Обычная аннотация
    let an_integer   = 5i32; // Суффиксная аннотация

    // Этим переменным будет присвоен тип по умолчанию.
    let default_float   = 3.0; // `f64`
    let default_integer = 7;   // `i32`
    
    // Тип также может быть выведен из контекста.
    let mut inferred_type = 12; // Тип i64 выводится из другой строки
    inferred_type = 4294967296i64;
    
    // Значение изменяемой переменной может быть изменено.
    let mut mutable = 12; // Mutable `i32`
    mutable = 21;
    
    // Ошибка! Тип переменной изменить нельзя.
    mutable = true;
    
    // Переменные могут быть переопределены с помощью затемнения.
    let mutable = true;
}

Смотрите также:

the std library, mut, inference, and shadowing