ما هو 'Result'؟
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 42 من 66.
بينما يتعامل Option مع غياب القيم، توفر Rust تعدادًا (enum) آخر لسيناريو مختلف ولكنه لا يقل أهمية: العمليات التي يمكن أن تفشل. تعرف على Result<T, E> - أداة Rust الأساسية للتعامل مع الأخطاء القابلة للاسترداد.
يحتوي التعداد Result على متغيرين يمثلان نتيجة العملية:
enum Result<T, E> {
Ok(T), // نجاح - يحتوي على النتيجة الناجحة
Err(E), // فشل - يحتوي على معلومات الخطأ
}عندما تنجح عملية ما، فإنها تعيد Ok(value) يحتوي على النتيجة الناجحة. وعندما تفشل، فإنها تعيد Err(error) يحتوي على معلومات حول الخطأ الذي حدث. هذا التعامل الصريح مع حالات النجاح والفشل يجعل برامج Rust أكثر موثوقية وقابلية للتنبؤ.
ستواجه Result في كل مكان في Rust - من عمليات الملفات التي قد تفشل بسبب ملفات مفقودة، إلى طلبات الشبكة التي قد تنتهي مهلتها، إلى عمليات التحليل التي قد تتلقى مدخلات غير صالحة. وعلى عكس اللغات التي تستخدم الاستثناءات، تجبرك Rust على الإقرار بأن العمليات يمكن أن تفشل والتعامل مع كلا النتيجتين بشكل صريح.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
ورقة مرجعية
يتعامل التعداد Result<T, E> مع العمليات التي قد تفشل:
enum Result<T, E> {
Ok(T), // نجاح - يحتوي على النتيجة الناجحة
Err(E), // فشل - يحتوي على معلومات الخطأ
}عندما تنجح العملية، فإنها تعيد Ok(value). وعندما تفشل، فإنها تعيد Err(error).
يُستخدم Result للأخطاء القابلة للاسترداد مثل عمليات الملفات، وطلبات الشبكة، وعمليات التحليل. تتطلب لغة Rust معالجة صريحة لكل من حالتي النجاح والفشل.
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى