عامل التأكيد على الـ Null
جزء من قسم Fundamentals في رحلة Dart على Coddy — الدرس 80 من 94.
يخبر عامل تأكيد القيمة غير الفارغة (null assertion operator) (!) لغة Dart أن المتغير القابل للقيمة null ليس null بالتأكيد في تلك النقطة من الكود. فهو يجبر Dart على معاملة النوع القابل للقيمة null كنوع غير قابل للقيمة null.
قم بإنشاء متغير نصي قابل للإلغاء (nullable string):
String? name = 'Dart';
استخدم عامل تأكيد القيمة غير الفارغة (null assertion operator) للتعامل معه كقيمة غير قابلة للفراغ (non-nullable):
String nonNullableName = name!;
print(nonNullableName);
بعد تنفيذ الكود أعلاه، ستكون النتيجة:
Dartكن حذرًا! إذا كان المتغير فارغًا (null) بالفعل، فسيؤدي ذلك إلى تعطل برنامجك:
String? language = null;
// String nonNullable = language!; // This would crash at runtime
التحدي
مبتدئفي هذا التحدي، ستتدرب على استخدام Null Assertion Operator (!) في Dart. يخبر هذا المشغل Dart أن المتغير القابل للإلغاء (nullable) ليس null بالتأكيد في نقطة معينة من الكود الخاص بك.
أكمل الكود أدناه لاستخدام null assertion operator لتحويل متغير username القابل للإلغاء إلى سلسلة نصية غير قابلة للإلغاء (non-nullable) يمكن تعيينها لـ displayName.
المخرجات المتوقعة:
Welcome, DartLearner!ورقة مرجعية
يخبر عامل تأكيد القيمة الفارغة (!) لغة Dart أن المتغير القابل لأن يكون فارغاً (nullable) ليس فارغاً بالتأكيد في تلك النقطة من الكود. فهو يجبر Dart على التعامل مع النوع القابل لأن يكون فارغاً كنوع غير قابل لأن يكون فارغاً (non-nullable).
String? name = 'Dart';
String nonNullableName = name!;
print(nonNullableName); // المخرج: Dart
تحذير: إذا كان المتغير فارغاً (null) بالفعل، فسيتحطم برنامجك في وقت التشغيل:
String? language = null;
// String nonNullable = language!; // سيؤدي هذا إلى توقف البرنامج
جرّب بنفسك
void main() {
// هذا المتغير النصي القابل للإلغاء (nullable String) يحتوي بالفعل على قيمة غير فارغة
String? username = 'DartLearner';
// مهام: استخدم عامل تأكيد القيمة غير الفارغة (!) لتحويل username
// من نص قابل للإلغاء (nullable String) إلى نص غير قابل للإلغاء (non-nullable String)
// حتى يمكن تعيينه لـ displayName
String displayName;
// سيقوم هذا بعرض رسالة الترحيب
print('Welcome, $displayName!');
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات - الجزء الثاني
معاملات المقارنةالمعامل المنطقي ANDالمعامل المنطقي ORالمعامل المنطقي NOTمعاملات فحص النوعملخص - إجراء المقارنات7التعامل مع النصوص (Strings)
دمج النصوص (String Concatenation)تضمين النصوص (String Interpolation)النصوص متعددة الأسطر (Multi-line Strings)خصائص النصوص (String Properties)دوال النصوص الأساسية (String Methods)10المجموعات - أساسيات الخرائط
ما هي الخرائط؟إنشاء خريطةالوصول إلى القيم عبر المفتاحأزواج المفتاح والقيمةالحصول على حجم الخريطةالحصول على المفاتيحالحصول على القيمالتحقق من وجود مفتاح13أمان الـ Null بشكل متعمق
فهم الـ Nullالأنواع القابلة لقيمة Nullالأنواع غير القابلة لقيمة Nullعامل التأكيد على الـ Nullالتهيئة المتأخرةملخص - التعامل مع الـ Null بأمان2المتغيرات وأنواع البيانات الأساسية
ما هي المتغيرات؟النصوص (Strings)الأعداد الصحيحة (int)الأعداد العشرية (double)القيم المنطقية (bool)استنتاج النوع باستخدام 'var'المتغيرات النهائية (Final)المتغيرات الثابتة (Constant)قواعد التسميةأساسيات الـ Null Safetyملخص - التصريح عن المتغيرات8مسار التحكم - الحلقات التكرارية
حلقة 'for' التكراريةحلقة 'while' التكراريةحلقة 'do-while' التكراريةاستخدام 'break' في الحلقات التكراريةاستخدام 'continue' في الحلقات التكراريةملخص - تكرار الكود البرمجي3المعاملات - الجزء الأول
المعاملات الحسابيةالقسمة الصحيحةمعامل باقي القسمة (Modulo)الزيادة والنقصاناختصارات التعيينملخص - الحسابات البسيطة6تدفق التحكم - اتخاذ القرار
جملة 'if'جملة 'else'جملة 'else if'ملخص - القرارات البسيطةجمل 'if' المتداخلةجملة 'switch'9المجموعات - أساسيات القوائم
ما هي القوائم؟إنشاء قائمةالوصول عبر الفهرسالحصول على طول القائمةإضافة عناصرإزالة عناصرالتحقق مما إذا كانت القائمة فارغةالتكرار عبر القائمة