0Pricing
Learn Rust Coding · Урок

let и изменяемость

Связывания и изменяемость

«let и изменяемость» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Binding Values with let

В Rust переменная создается с помощью ключевого слова let. Это связывает имя со значением.

По умолчанию любая привязка является неизменяемой — как только вы присвоили ей значение, изменить его уже нельзя.

fn main() {
    let x = 5;
    println!("The value of x is: {}", x);
}

Immutable by Default

Rust делает переменные неизменяемыми намеренно. Это предотвращает случайные изменения и упрощает понимание кода.

Попытка переназначить неизменяемую привязку вызывает ошибку компиляции, а не аварийное завершение во время выполнения.

  • let x = 5;, а затем x = 6; не скомпилируется.
fn main() {
    let x = 5;
    // x = 6; // this would cause a compile error
    println!("x stays {}", x);
}

Making Variables Mutable

Когда вам нужно изменить значение, добавьте ключевое слово mut. Оно помечает привязку как изменяемую.

Теперь вы можете переприсваивать её столько раз, сколько захотите.

fn main() {
    let mut count = 0;
    count = count + 1;
    count += 1;
    println!("count is {}", count);
}

Type Inference

Rust обычно определяет тип переменной на основе её значения. Это называется выводом типов.

let x = 5; автоматически присваивает x тип i32.

fn main() {
    let n = 42;      // inferred as i32
    let pi = 3.14;   // inferred as f64
    println!("{} and {}", n, pi);
}

Type Annotations

Вы также можете явно указать тип с помощью двоеточия и имени типа. Это называется аннотацией типа.

Аннотации полезны, когда компилятор не может вывести тип самостоятельно, или для наглядности.

fn main() {
    let age: u32 = 30;
    let price: f64 = 9.99;
    println!("age {} price {}", age, price);
}

Constants

const всегда неизменяема и должна иметь аннотацию типа. Её значение должно быть известно во время компиляции.

Согласно соглашению, константы записываются в формате SCREAMING_SNAKE_CASE.

fn main() {
    const MAX_POINTS: u32 = 100_000;
    println!("Max is {}", MAX_POINTS);
}

const vs let

Ключевые различия между const и let:

  • const никогда не может быть mut.
  • const требует аннотации типа.
  • const должен быть константным выражением, вычисляемым во время компиляции.
  • Значения let могут вычисляться во время выполнения.
fn main() {
    const SECONDS_PER_HOUR: u32 = 60 * 60;
    let hours = 3;
    println!("{} seconds", SECONDS_PER_HOUR * hours);
}

Mutating in a Loop

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

Здесь мы суммируем числа, используя аккумулятор mut.

fn main() {
    let mut total = 0;
    for i in 1..=5 {
        total += i;
    }
    println!("Sum is {}", total);
}

Underscore for Unused

Если вы связываете значение, но никогда его не используете, Rust выдаст предупреждение. Добавьте символ подчеркивания перед именем, чтобы подавить это предупреждение.

  • let _unused = 10; сообщает компилятору, что это сделано намеренно.
fn main() {
    let _temp = 99;
    let used = 1;
    println!("{}", used);
}

Multiple Bindings

Вы можете объявить несколько переменных на отдельных строках, каждую со своим собственным let.

Каждое связывание является независимым и неизменяемым, если оно не помечено как mut.

fn main() {
    let name = "Rust";
    let year = 2010;
    let mut version = 1;
    version += 1;
    println!("{} born {} v{}", name, year, version);
}

Why Immutability Helps

Неизменяемость — это функция обеспечения безопасности. Когда компилятор знает, что значение не может измениться, он может давать более веские гарантии и предотвращать целые классы ошибок.

Используйте изменяемость с помощью ключевого слова mut только тогда, когда это действительно необходимо.

fn main() {
    let config = "production";
    // config is guaranteed not to change
    println!("Running in {}", config);
}

Quick Check

Какое ключевое слово делает переменную в Rust изменяемой?

Recap

Вы изучили основы связывания (bindings) в Rust:

  • let связывает имя со значением, по умолчанию неизменяемым.
  • mut делает связывание изменяемым.
  • Rust выводит типы автоматически, но вы можете добавлять аннотации с помощью :.
  • const вычисляется во время компиляции, всегда неизменяем и требует явного указания типа.
fn main() {
    let mut score: u32 = 0;
    const BONUS: u32 = 10;
    score += BONUS;
    println!("Final score: {}", score);
}

Часто задаваемые вопросы

Урок «let и изменяемость» бесплатный?

Да — полный текст урока «let и изменяемость» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «let и изменяемость»?

Связывания и изменяемость Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «let и изменяемость»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. let и изменяемость
  2. Скалярные типы
  3. Составные типы
  4. Затенение
← Назад к Learn Rust Coding