0Pricing
Learn Rust Coding · Урок

if let и while let

Лаконичное сопоставление

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

Краткое сопоставление

Иногда Вас интересует только один образец. Конструкции if let и while let позволяют выполнять краткое сопоставление без полного match.

Форма if let

if let выполняет блок только тогда, когда значение соответствует образцу, связывая все извлечённые данные.

fn main() {
    let maybe = Some(10);
    if let Some(n) = maybe {
        println!("value is {n}");
    }
}

if let и match

if let — это сокращённая запись match с одной интересующей ветвью и переходом _ => () для остальных случаев. Используйте её, когда другие случаи не требуют обработки.

fn main() {
    let config: Option<i32> = None;
    // match equivalent would have an empty _ arm
    if let Some(v) = config {
        println!("configured: {v}");
    }
    println!("done");
}

Добавление else

Добавьте else, чтобы обработать случай несовпадения.

fn main() {
    let result: Result<i32, String> = Err("boom".to_string());
    if let Ok(v) = result {
        println!("ok: {v}");
    } else {
        println!("failed");
    }
}

let else

let ... else выполняет привязку при совпадении с образцом, а в противном случае запускает блок, который не возвращает управление (например, return). Это удобно для досрочного выхода.

fn parse(s: &str) -> i32 {
    let Ok(n) = s.parse::<i32>() else {
        println!("not a number");
        return 0;
    };
    n * 2
}

fn main() {
    println!("{}", parse("21"));
    println!("{}", parse("oops"));
}

Форма while let

while let продолжает цикл, пока значение соответствует образцу. Это идеально подходит для последовательного извлечения элементов, например из стека.

fn main() {
    let mut stack = vec![1, 2, 3];
    while let Some(top) = stack.pop() {
        println!("popped {top}");
    }
}

Обход итераторов

while let может выполнять итерацию, повторно вызывая next и останавливаясь, когда тот возвращает None.

fn main() {
    let mut iter = [10, 20, 30].into_iter();
    while let Some(x) = iter.next() {
        println!("{x}");
    }
}

Условия-ограничители с if let

Добавьте условие && (в Rust 2024) или вложите if, чтобы объединить конструкцию с условием-ограничителем.

fn main() {
    let value = Some(8);
    if let Some(n) = value {
        if n > 5 {
            println!("big: {n}");
        }
    }
}

Какую конструкцию выбрать

Рекомендации:

  • if let — обработать один образец, проигнорировав остальные
  • let else — выполнить привязку или сразу выйти
  • while let — выполнять цикл, пока образец продолжает подходить
  • match — когда нужно обработать несколько случаев

Компромисс в читаемости

Эти формы сокращают шаблонный код, но могут скрывать отдельные случаи. Если Вам нужно обрабатывать несколько образцов, вернитесь к полному match для большей ясности.

Вложенные if let

Необязательные значения можно объединять, вкладывая конструкции if let и раскрывая по одному уровню за раз.

fn main() {
    let outer: Option<Option<i32>> = Some(Some(99));
    if let Some(inner) = outer {
        if let Some(value) = inner {
            println!("value is {value}");
        }
    }
}

Быстрая проверка

Какая конструкция повторно выполняет тело цикла, пока значение соответствует образцу?

Повторение

Вы изучили краткое сопоставление:

  • if let обрабатывает один образец, при необходимости с else
  • let else выполняет привязку или досрочно завершает выполнение
  • while let выполняет цикл, пока образец подходит
  • Переключайтесь на match, когда нужно обработать несколько случаев

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

Урок «if let и while let» бесплатный?

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

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

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

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

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

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

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

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

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

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

  1. Подробно о match
  2. if let и while let
  3. Связывание с помощью @
  4. Деструктуризация
← Назад к Learn Rust Coding