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обрабатывает один образец, при необходимости сelselet 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 — локальная установка не требуется.
Все уроки этого курса
- Подробно о match
- if let и while let
- Связывание с помощью @
- Деструктуризация