Потік контролю Let
Rust має кілька конструкцій потоку керування, які відрізняються від інших мов. Вони використовуються для зіставлення шаблонів:
- вирази
if let
- вирази
let else
- вирази
while let
вирази if let
Вираз if let
дозволяє виконувати інший код залежно від того, чи відповідає значення шаблону :
вирази let else
Для загального випадку зіставлення шаблону і повернення з функції використовуйте let else
. Випадок “else” повинен відрізнятися (return
, break
або паніка - що завгодно, але не випадання з кінця блоку).
Подібно до if let
, існує варіант while let
, який багаторазово перевіряє значення на відповідність шаблону:
Тут String::pop
повертає Some(c)
поки рядок не стане порожнім, після чого поверне None
. Використання while let
дозволяє нам продовжувати ітерацію по всіх елементах.
Speaker Notes
This slide should take about 10 minutes.
if-let
- На відміну від
match
,if let
не має охоплювати всі гілки. Це може зробити його більш лаконічним, ніжmatch
. - Загальним використанням є обробка значень
Some
під час роботи зOption
. - На відміну від
match
,if let
не підтримує захисні вирази для збігу шаблонів.
let-else
if-let
може накопичуватись, як показано. Конструкція let-else
підтримує згладжування цього вкладеного коду. Перепишіть незручну версію для студентів, щоб вони могли побачити перетворення.
Переписана версія така:
while-let
- Зверніть увагу, що цикл
while let
триватиме, доки значення відповідає шаблону. - Ви можете переписати цикл
while let
як нескінченний цикл з оператором if, який переривається, коли дляname.pop()
немає значення для розгортання. Циклwhile let
забезпечує синтаксичний цукор для наведеного вище сценарію.