الوصول إلى قيم optional
استخدم value_or وhas_value
الوصول إلى قيم optional درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
عامل إلغاء الإشارة
أسرع طريقة لقراءة optional هي *opt، لكن لا تستخدموها إلا عند التأكد من احتوائه على قيمة؛ فهي لا تجري أي تحقق.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 10;
if (o) std::cout << *o << "\n";
}الدالة value()
تعيد opt.value() القيمة، لكنها ترمي std::bad_optional_access إذا كان optional فارغًا. استخدموها عندما يكون فراغ optional خطأً حقيقيًا يستحق استثناءً.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o;
try { std::cout << o.value() << "\n"; }
catch (const std::bad_optional_access&) { std::cout << "empty!\n"; }
}value_or للقيم الافتراضية
تعيد opt.value_or(fallback) القيمة المحتواة عند وجودها، وإلا تعيد القيمة البديلة. لا حاجة إلى تفرّع أو استثناءات.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = std::nullopt;
std::cout << o.value_or(-1) << "\n"; // -1
}value_or مع بيانات حقيقية
من الاستخدامات الشائعة توفير قيمة افتراضية للإعدادات أو نتائج البحث المفقودة.
#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> lookup(bool found) {
if (found) return std::string("Pro");
return std::nullopt;
}
int main() {
std::cout << lookup(false).value_or("Free") << "\n";
}عامل السهم
بالنسبة إلى optionals من أنواع class، يتيح opt->member الوصول إلى الأعضاء مباشرةً (مع افتراض أنه غير فارغ أيضًا).
#include <iostream>
#include <optional>
#include <string>
int main() {
std::optional<std::string> o = std::string("hello");
if (o) std::cout << o->size() << "\n";
}الحماية قبل الوصول
النمط الآمن هو: تحقّقوا ثم استخدموا. ويؤدي الجمع بين التحقق والوصول إلى تجنب الاستثناءات والسلوك غير المعرّف معًا.
#include <iostream>
#include <optional>
int main() {
std::optional<int> o = 7;
if (o.has_value()) {
int x = *o;
std::cout << x * 2 << "\n";
}
}عبارة التهيئة في if
يمكنكم التصريح والتحقق في سطر واحد باستخدام عبارة تهيئة في if، مع إبقاء نطاق optional مقتصرًا على الفرع.
#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
if (auto v = find(); v.has_value())
std::cout << *v << "\n";
}Transform (C++23)
تطبّق الأدوات المونادية مثل transform دالةً فقط عند وجود قيمة، وتعيد Optional جديدًا. ويتيح ذلك تسلسل العمليات بطريقة واضحة.
and_then للتسلسل
تستدعي and_then (C++23) دالةً تعيد optional بدورها، ثم تسطّح النتيجة؛ وهي مثالية للخطوات التي قد يفشل كل منها.
اختيار أداة الوصول
استخدموا value_or عند توفر قيمة افتراضية مناسبة، وvalue() عندما يكون الفراغ خطأً يستحق استثناءً، واستخدموا */-> فقط بعد إجراء تحقق صريح.
تجنب إلغاء الإشارة دون تحقق
لا تستدعوا *opt مطلقًا دون التأكد من أن optional غير فارغ. فهذا سلوك غير معرّف ومصدر شائع للتعطلات.
تحقق سريع
تحقّقوا من فهمكم للوصول إلى optional.
مراجعة
تعلّمتم كيفية الوصول إلى optionals:
- استخدموا
*و->بعد إجراء تحقق. - ترمي
value()استثناءً عند الفراغ. - توفر
value_orقيمة افتراضية. - تسلسل الأداتان الموناديتان
transform/and_thenالعمليات (C++23).
الأسئلة الشائعة
هل درس «الوصول إلى قيم optional» مجاني؟
نعم — نص درس «الوصول إلى قيم optional» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «الوصول إلى قيم optional»؟
استخدم value_or وhas_value تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الوصول إلى قيم optional»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تمثيل الغياب باستخدام optional
- الوصول إلى قيم optional
- أساسيات std::expected
- أنماط معالجة الأخطاء