Avatar ·

ما هو unwrap() في Rust وما الغرض من استخدامه؟ شرح مع أمثلة

مرحبًا بالجميع! لقد بدأت للتو في تعلم Rust بعد Python ووجدت بنية غريبة — وهي طريقة unwrap(). في أمثلة مختلفة من الكود أرى شيئًا مثل: ```rust let x = some_result.unwrap(); ``` أفهم أن هذا مرتبط بمعالجة الأخطاء، لكنني لا أفهم الآلية تمامًا. في Python اعتدنا على try/except، ولكن هنا منطق مختلف. ما يربكني بشكل خاص هو عندما أرى unwrap() بعد استدعاء دوال تُرجع Result أو Option. على سبيل المثال، عند قراءة ملف أو تحليل رقم من سلسلة نصية: ```rust let number: i32 = "42".parse().unwrap(); let content = std::fs::read_to_string("file.txt").unwrap(); ``` ماذا سيحدث إذا لم يكن الملف موجودًا أو إذا كانت السلسلة النصية ليست رقمًا؟ سمعت أن unwrap قد يسبب panic — هل هذا مثل الاستثناء؟ أم أنه شيء آخر؟ متى يجب استخدام unwrap بشكل عام، ومتى يكون من الأفضل استخدام طرق أخرى؟ هل هناك بدائل لا تؤدي إلى إنهاء البرنامج بشكل مفاجئ؟ من فضلك، اشرح بأمثلة بسيطة.