Конструкция if со значением в Rust
В Rust проверка может не только запускать команды, но и отдавать значение. Такую запись используют справа от знака равенства при объявлении переменной. Обе ветки должны давать результат одного типа.
В ветках пишут выражения без точки с запятой в конце. Если поставить точку с запятой, ветка превращается в пустой тип, и типы перестают совпадать.
Запишем метку по знаку числа:
let n = 5;
let label = if n > 0 { "plus" } else { "minus" };
println!("{}", label);
При отрицательном числе в переменной окажется другая фраза:
let n = -2;
let label = if n > 0 { "plus" } else { "minus" };
println!("{}", label);
Пусть нужно запомнить, исполнилось ли уже
18 лет. Длинная запись только кладет
ответ в переменную:
let age = 17;
let mut adult = false;
if age >= 18 {
adult = true;
} else {
adult = false;
}
println!("{}", adult); // выведет false
Ту же запись короче отдает само условие:
let age = 17;
let adult = if age >= 18 { true } else { false };
println!("{}", adult); // выведет false
Когда обе ветки - это true и false,
хватает самого сравнения:
let age = 17;
let adult = age >= 18;
println!("{}", adult); // выведет false
Дано число:
let score = 100;
Запишите в tag фразу "full" или
"part" по сравнению с 100.
Выведите tag.
Дана переменная:
let ok = true;
Запишите в word "yes" или "no"
по значению ok. Выведите word.
Скажите, почему в ветках выражения нельзя заканчивать точкой с запятой, если результат идет в переменную.
Дано число:
let num = -3;
Запишите в res число 1, если
num больше или равно нулю, и число
-1, если num меньше нуля.