ما هما Some و None في Rust؟ شرح Option<T> للمبتدئين
مرحبًا! لقد بدأت للتو في تعلم Rust بعد Python و JavaScript، وواجهت بناء جملة غير مفهوم. في كود الآخرين، أرى غالبًا أشياء مثل:
```rust
fn find_user(id: u32) -> Option {
if id == 42 {
Some(String::from("Alice"))
} else {
None
}
}
```
أنا لا أفهم على الإطلاق ما هما `Some` و `None`. لماذا لا يمكن ببساطة إرجاع نص أو `null`؟ في Python كنت سأكتب:
```python
def find_user(id):
if id == 42:
return "Alice"
else:
return None
```
وكان هذا سيعمل. أما في Rust، يجب أن أكتب شيئًا مثل `Option` وألف النتيجة بـ `Some`. علاوة على ذلك، حاولت استخدام نتيجة هذه الدالة — وحصلت على خطأ في الترجمة. إليك الكود الخاص بي:
```rust
let user = find_user(42);
println!("User: {}", user); // خطأ!
```
يشتكي المترجم من أن `Option` لا ينفذ trait `Display`. كيف يمكنني العمل مع هذا بشكل صحيح؟ ما معنى `Some` و `None` أساسًا؟ لماذا لا يستطيع Rust فعل ذلك مثل...