8. Условные выражения
Условные выражения это очень интересная тема. С ними вы сможете создавать более сложные программы обладающие вариативностью.
Общий смысл условных выражений в том, что вы проверяете некое условие. В зависимости от его соблюдения, производите действие. Например, вы собираетесь выйти на улицу и проверяете: если снаружи начинается дождь, то берете зонтик, иначе не берете.
В Rust есть следующие типы условных выражений:
if (если),if else (если и иначе) – проверка условия.match (совпадение) – сопоставление с образцом.if let - сравнение с шаблоном.
Условное выражение if
Здесь проверяется некое условие, и если оно истинное, то выполняется блок кода. Если не истинное, то пропускается и программа идет дальше. Например:
fn main() {
if 4 == 10/2 {
println!{"Четыре равно пяти!"};
}
if 365/7 > 24 {
println!("Недель в году больше, чем часов в сутках");
}
}
Первое условие ложно, поэтому код в скобках не был исполнен, а второе истинно и текст вывелся в консоль.
Общий синтаксис условного выражения if:
if condition {
executable code;
}
Расширенное условное выражение if..else
Если условие соблюдается, то выполняется один блок кода, а если не соблюдается, то другой.
fn main() {
let learn_language: &str = "Rust"; // Изучаемый нами язык программирования
if learn_language == "Rust" {
println!("Мы изучаем Rust language.");
} else {
println!("Мы изучаем {}.", learn_language);
}
}
Попробуйте дать переменной другое значение.
Кстати, конструкции
Общий синтаксис проверки условия с блоком кода при несоблюдении условия:
fn main() {
if condition {
executable code;
} else if condition {
executable code;
} else {
executable code;
}
}
Вот более сложная версия предыдущего примера кода:
fn main() {
let learn_language: &str = "Rust"; // Изучаемый нами язык программирования
if learn_language == "Rust" {
println!("Мы изучаем язык программирования Раст.");
} else if learn_language == "Python" {
println!("Мы изучаем язык программирования Питон.");
} else {
println!("Мы изучаем {}.", learn_language);
}
}
В этом примере мы сначала проверяем не является ли изучаемый нами язык Rust, если это не так, то проверяем не Python ли это, а если не Rust и не Python, то тогда уже просто подставляем значение проверяемой переменной в строку как есть.
Однако, для решения этой задачи существует более подходящее условное выражение – match.
Условное выражение match
При использовании
fn main() {
let learn_language: &str = "Rust"; // Изучаемый нами язык программирования
match learn_language {
"Rust" => println!("Мы изучаем язык программирования Раст."),
"Python" => println!("Мы изучаем язык программирования Питон."),
_ => println!("Мы изучаем {}.", learn_language)
}
}
Если бы переменной
Общий синтаксис match:
match match_value {
value1 => {executable code;},
value2 => {executable code;},
…
_ => {executable code;}, // default value
}
Присвоение переменной результата match
Есть возможность значение, полученное при сопоставлении с образцом, присвоить некой переменной. Что может быть очень удобно и сделает код яснее.
fn main() {
let learn_language: &str = "Rust"; // Изучаемый нами язык программирования
let learn_lang_mod: &str = match learn_language {
"Rust" => "Раст",
"Python" => "Питон",
_ => learn_language
};
println!("Мы изучаем язык программирования {}.", learn_lang_mod);
}
В этой программе мы создали переменную в которую записываем модифицированное значение изучаемого нами языка, чтобы распечатать в конце. Если этого языка нет в нашем списке, то мы выкрутимся из ситуации отдавая переменной неизменное значение.
Общий синтаксис присвоения переменной результата сопоставления match:
let result_variable = match match_value {
value1 => {executable code;},
value2 => {executable code;},
…
_ => {executable code;}, // default value
};
Сравнение по шаблону if let
Конструкция
Давайте предварительно посмотрим пример в котором мы проверяем две переменные на совпадение:
fn main() {
let course = ("Rust", "beginner","course");
let course1 = ("Rust", "beginner", "curriculum");
if course1 == course {
println!("Значения совпали.");
}
else {
println!("Значения не совпали.");
}
}
Конструкция if let по сути делает то же самое, но позволяет проверять частичное совпадение с шаблоном:
fn main() {
let course = ("Rust", "beginner","course");
if let ("Rust", "beginner", cur) = course {
println!("Проверяемые значения совпали с шаблоном.");
}
else {
println!("Совпадений не обнаружено.");
}
}
Здесь мы проверили на соответствие первого и второго значения в кортеже, но мы также можем что-нибудь сделать и с третьим значением, которое попадает в переменную
Общий синтаксис if let:
if let (value1, value2) = match_variable {
executable code;
} else {
executable code;
}
Также мы можем проверять на соответствие другому шаблону. Например, использовать сопоставление для выборки курсов для начинающих:
Для просмотра заданий и решений, а также публикации своих решений необходимо зарегистрироваться на сайте.
Всё бесплатно, мы просто хотим с вами познакомиться и понять насколько актуально то, что мы делаем.