Avatar ·

ما هما 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 فعل ذلك مثل...