ما هو 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(); // يسبب panic عند None
// let name = user.expect("User not found"); // أيضاً panic
// let name = user.unwrap_or(String::from("Default")); // يعمل لكني أفقد معلومات الخطأ
}
```
أتوقع أن في