Assert & Ternary Operator

الشرح التفصيلي لـ assert و Ternary Operator في لغة Dart

أولًا: assert في Dart

تُستخدم assert للتحقق من صحة القيم أثناء عملية التطوير (debugging). إذا كان الشرط الممرر إلى assert خطأ (false)، فإن البرنامج سيتوقف ويظهر خطأ. ولكن عند تشغيل التطبيق في وضع الإنتاج (release mode)، يتم تجاهل assert.

الصيغة العامة لـ assert

dartنسختحريرassert(condition, optionalMessage);
  • condition: الشرط الذي يتم التحقق منه، إذا كان false سيتوقف التنفيذ.
  • optionalMessage: رسالة اختيارية تُطبع عند فشل التحقق، لتوضيح سبب الخطأ.

مثال على assert

dartنسختحريرvoid main() {
  int age = 17;

  // التأكد من أن العمر أكبر من أو يساوي 18
  assert(age >= 18, "العمر يجب أن يكون 18 أو أكثر");

  print("تم اجتياز الاختبار بنجاح!");
}

🔹 إذا كان age = 17، فسيحدث خطأ أثناء التشغيل في وضع debug، وسيظهر الخطأ:

pgsqlنسختحريرUnhandled exception: Assertion failed: العمر يجب أن يكون 18 أو أكثر

🔹 أما إذا كان age = 20، فسيتم تنفيذ البرنامج بشكل طبيعي.

متى يتم استخدام assert؟

  • أثناء التطوير فقط، لا يُستخدم في بيئة الإنتاج.
  • التحقق من صحة المدخلات أثناء البرمجة.
  • التأكد من أن القيم تفي بالمتطلبات قبل استخدامها.

ثانيًا: Ternary Operator (المعامل الثلاثي)

المعامل الثلاثي (Ternary Operator) هو اختصار لكتابة جملة if-else في سطر واحد، مما يجعل الكود أكثر اختصارًا ووضوحًا.

الصيغة العامة للمعامل الثلاثي

dartنسختحريرcondition ? expressionIfTrue : expressionIfFalse;
  • condition: الشرط الذي سيتم تقييمه.
  • expressionIfTrue: القيمة التي ستُعاد إذا كان الشرط true.
  • expressionIfFalse: القيمة التي ستُعاد إذا كان الشرط false.

مثال على Ternary Operator

dartنسختحريرvoid main() {
  int age = 20;

  String result = (age >= 18) ? "مسموح بالدخول" : "غير مسموح بالدخول";
  
  print(result); // مسموح بالدخول
}

🔹 إذا كان age >= 18، فستكون النتيجة “مسموح بالدخول”.
🔹 إذا كان age < 18، فستكون النتيجة “غير مسموح بالدخول”.

مثال آخر مع الطباعة مباشرة

dartنسختحريرvoid main() {
  int number = 10;
  print(number % 2 == 0 ? "عدد زوجي" : "عدد فردي");
}

🔹 إذا كان number = 10، فسيطبع “عدد زوجي”.
🔹 إذا كان number = 7، فسيطبع “عدد فردي”.

استخدام Ternary Operator داخل print

يمكنك استخدام المعامل الثلاثي داخل print مباشرة:

dartنسختحريرvoid main() {
  int score = 75;
  print(score >= 50 ? "ناجح" : "راسب");
}

🔹 إذا كان score >= 50، فسيطبع “ناجح”.
🔹 إذا كان score < 50، فسيطبع “راسب”.

التداخل بين أكثر من Ternary Operator

يمكنك استخدام أكثر من شرط مع Ternary Operator داخل بعضه:

dartنسختحريرvoid main() {
  int number = 0;

  String result = (number > 0) ? "عدد موجب" : 
                  (number < 0) ? "عدد سالب" : 
                  "صفر";

  print(result); // صفر
}

🔹 إذا كان العدد موجبًا، فسيطبع “عدد موجب”.
🔹 إذا كان العدد سالبًا، فسيطبع “عدد سالب”.
🔹 إذا كان 0، فسيطبع “صفر”.


الفرق بين assert و Ternary Operator

الميزةassertTernary Operator
الاستخدامللتحقق من صحة القيم أثناء التطويرلاختصار جملة if-else
التأثير في الكوديوقف تنفيذ البرنامج إذا كان الشرط falseلا يوقف التنفيذ بل يعيد قيمة
متى يتم استخدامه؟أثناء التطوير فقطفي جميع الأوضاع
يعمل في وضع release؟❌ لا يعمل✅ يعمل

الخلاصة

assert تُستخدم لاختبار صحة القيم أثناء التطوير فقط، وتوقف التنفيذ عند فشل الشرط.
Ternary Operator تُستخدم لاختصار if-else في سطر واحد، وتجعل الكود أكثر تنظيمًا ووضوحًا.

إذا كنت بحاجة إلى كود أكثر كفاءة واختصارًا، فاستخدم Ternary Operator. أما إذا كنت بحاجة إلى فحص القيم أثناء التطوير، فاستخدم assert. 🚀