Изучайте Rust из JavaScript — None или Null
Поскольку в Rust нет null, людям приходится оборачивать концепцию в Option и обрабатывать их явно. Это довольно странно для людей из других языков.
Я поделюсь тремя способами справиться с Option::None
- Допустить ошибку, если значение является обязательным
- Укажите значение по умолчанию
- Продолжить, если даже ноль
Пусть это не удастся
Если значение является обязательным, но пустым, завершается досрочно. Прекратить выполнение
let value = Some("hello")
value.unwrap() // panic
// or
value? // propagate None
Это значит
if (value === null){
process.exit(...) // like panic
// or
return null; // like propagating None
}
Укажите значение по умолчанию
Укажите значение по умолчанию, если данные пусты.
let v2 = value.unwrap_or("world"); // if value is None, v2 is "world"
// or more complicate
let v2 = value.unwrap_or_else(|| {
// do something here
"world"
})
Это значит
let v2 = value || "world" // only for illustration not for production
Недостатком является то, что мы должны предоставить значение того же типа, иначе компилятор будет жаловаться.
Продолжить, если даже ноль
Если значение является необязательным, мы можем напрямую определить, является ли значение нулевым или нет, а затем воздействовать на него.
if let Some(actual_value) = value {
// actual_value is the concrete value "hello" now
// BTW tye type of value is still Option::Some here,
// for people coming from TypeScript
}
// or
if value.is_some() {
}
Это значит
if (value !== null){
let actual_value = value
}
Вы можете проверить использование if let в официальном документе.
Аналогичен второму способу, но имеет некоторые преимущества.
- Нет необходимости в значении по умолчанию. Мы можем обрабатывать только ненулевой случай
- Избегайте гнездования. Людям не нужно вкладывать возможную сложную логику в замыкание
unwrap_or_else. Держите код в чистоте