Конструкция if
if
в Rust не сильно сложен и больше похож на if
в динамически типизированных
языках, чем на более традиционный из системных. Давайте поговорим о нём, чтобы
вы поняли некоторые его нюансы.
if
является одной из форм более общего понятия, именуемого ветвлением. Это
название произошло от ветвей деревьев: конечный результат зависит от того, какой
из нескольких вариантов будет выбран.
if
содержит одно условие, в зависимости от которого будет выполняться одна из
двух ветвей:
let x = 5;
if x == 5 {
println!("x равняется пяти!");
}
При изменении значения x
на какое-либо другое, эта строчка не будет выведена
на экран. Если подробнее, то когда условие будет иметь значение true
,
следующий после него блок кода выполнится. В противном случае — нет.
Бывает нужно что-то выполнить, если условие не выполнится (выражение будет иметь
значение false). В таком случае можно использовать else
:
let x = 5;
if x == 5 {
println!("x равняется пяти!");
} else {
println!("x это не пять :(");
}
Когда необходимо больше одного выбора, можно использовать else if
:
let x = 5;
if x == 5 {
println!("x равняется пяти!");
} else if x == 6 {
println!("x это шесть!");
} else {
println!("x это ни пять, ни шесть :(");
}
Всё это довольно прозаично. Однако, вы также можете сделать такую штуку:
let x = 5;
let y = if x == 5 {
10
} else {
15
}; // y: i32
Которую мы можем (и должны) записать примерно следующим образом:
let x = 5;
let y = if x == 5 { 10 } else { 15 }; // y: i32
Это работает, потому что if
является выражением. Его значением является
значение последнего выражения из выбранной ветви. if
без else
всегда
возвращает ()
в качестве значения.