Что такое null/nil в Rust и как с ним работать?
Всем привет! Начал изучать Rust после C++/Java, и никак не могу разобраться с концепцией null/nil. В других языках я привык к тому, что переменная может быть null (или nil), и это часто приводило к NullPointerException. Насколько я понимаю, в Rust такого быть не должно, но тогда как работать с отсутствием значения?
Я уже читал про Option и понимаю, что это аналог Optional из Java или Maybe из Haskell. Но на практике у меня возникают сложности. Вот пример кода, который я написал:
```rust
fn find_user(id: i32) -> Option {
if id == 1 {
Some(String::from("Alice"))
} else {
None
}
}
fn main() {
let user = find_user(2);
// Как правильно обработать этот случай?
// Я пробовал так:
// let name = user.unwrap(); // паникует при None
// let name = user.expect("User not found"); // тоже паника
// let name = user.unwrap_or(String::from("Default")); // работает, но теряю информацию об ошибке
}
```
Ожидаю, что в Rust есть идиоматичный способ обработки отсутствия значения без паники. Как правильно использовать match, if let, ? оператор или другие конструкции для этой задачи? Хотелось бы увидеть примеры с разными подходами: когда нужно просто вернуть значение по умолчанию, когда нужно выполнить разные действия для Some и None, и как пробрасывать None вверх по стеку вызовов. Заранее спасибо за помощь!