أنماط معالجة الأخطاء
كوّن بين optional وexpected
أنماط معالجة الأخطاء درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
أداتان، هدف واحد
تستبدل كلٌّ من std::optional وstd::expected القيمَ الخاصة المعرّضة للأخطاء. يوضّح هذا الدرس أنماط دمجهما وتركيبهما بطريقة نظيفة.
الإرجاع المبكر عند الخلو
هذا نمط بسيط وسهل القراءة: افحصوا optional، واخرجوا مبكرًا إذا كانت فارغة قبل المتابعة.
#include <iostream>
#include <optional>
std::optional<int> parse(bool ok) { return ok ? std::optional<int>(5) : std::nullopt; }
int main() {
auto v = parse(true);
if (!v) { std::cout << "no value\n"; return 0; }
std::cout << *v + 1 << "\n";
}التحويل من optional إلى expected
حوّلوا optional المفقودة إلى خطأ موصوف عندما يحتاج المستدعي إلى معرفة السبب.
#include <expected>
#include <optional>
#include <string>
std::expected<int, std::string> require(std::optional<int> o) {
if (o) return *o;
return std::unexpected("value missing");
}
int main() {}التسلسل باستخدام value_or
عندما تغذّي عمليات بحث متعددة نتيجةً واحدة، تتيح لكم value_or توفير قيم افتراضية مباشرةً دون تداخل عبارات if.
#include <iostream>
#include <optional>
int setting(std::optional<int> user, int fallback) {
return user.value_or(fallback);
}
int main() {
std::cout << setting(std::nullopt, 42) << "\n";
}تمرير الأخطاء إلى الأعلى
باستخدام std::expected، يمكن للدالة فحص استدعاء فرعي وتمرير خطئه دون تغيير، وبذلك تبني سلسلة لمعالجة الأخطاء.
#include <expected>
#include <string>
using R = std::expected<int, std::string>;
R step1(bool ok) { return ok ? R(2) : R(std::unexpected("step1 failed")); }
R run(bool ok) {
auto r = step1(ok);
if (!r) return std::unexpected(r.error());
return *r * 10;
}
int main() {}التسلسل الأحادي باستخدام and_then
تسلسل and_then في C++23 العمليات التي تُرجع كلٌّ منها optional أو expected، ويتوقف عند أول فشل، من دون سلسلة if يدوية.
استخدام transform لإجراء التحويل
تطبّق transform دالةً عادية على قيمة النجاح، وتُبقي الأخطاء أو الخلوّ دون تغيير، فتحوّل مسار النجاح فقط.
استخدام or_else للاسترداد
تشغّل or_else إجراءً بديلًا يمكنه توفير قيمة بديلة أو خطأ بديل عندما تكون القيمة الأصلية فارغة أو عند حدوث فشل.
الاختيار بينهما
استخدموا optional عندما لا يحتاج الغياب إلى تفسير، مثل عدم العثور على عنصر في ذاكرة التخزين المؤقت. واستخدموا expected عندما يجب على المستدعي التمييز بين أسباب الفشل، مثل أخطاء التحليل وأخطاء الصلاحيات.
تجنّبوا القيم الخاصة المختلطة
لا تخلطوا رموز الأخطاء القديمة مع optional/expected في واجهة برمجية واحدة. اختاروا استراتيجية متسقة كي يتعامل المستدعون مع حالات الفشل بطريقة موحّدة.
أبقوا الأخطاء محددة النوع
فضّلوا تعدادًا أو بنيةً صغيرة لنوع الخطأ بدلًا من السلاسل النصية المجردة عندما يجري التحقق من حالات الفشل برمجيًا؛ فالسلاسل النصية أنسب للرسائل الموجّهة إلى المستخدمين.
تحقّق سريع
تحققوا من فهمكم لأنماط معالجة الأخطاء.
مراجعة
لقد تعلّمتم أنماط معالجة الأخطاء:
- يحافظ الإرجاع المبكر عند الخلو أو الخطأ على بساطة بنية الشيفرة.
- حوّلوا optional إلى expected عندما تكون هناك حاجة إلى معرفة السبب.
- ركّبوا العمليات باستخدام
and_thenوtransformوor_elseفي C++23. - حافظوا على الاتساق، وتجنّبوا خلط القيم الخاصة مع optional/expected.
الأسئلة الشائعة
هل درس «أنماط معالجة الأخطاء» مجاني؟
نعم — نص درس «أنماط معالجة الأخطاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنماط معالجة الأخطاء»؟
كوّن بين optional وexpected تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «أنماط معالجة الأخطاء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تمثيل الغياب باستخدام optional
- الوصول إلى قيم optional
- أساسيات std::expected
- أنماط معالجة الأخطاء