الوصول المتفادي لـ Null
جزء من قسم Fundamentals في رحلة Dart على Coddy — الدرس 29 من 94.
يقوم معامل الوصول الآمن للقيم الفارغة (null-aware access operator) (?.) بالوصول إلى الخصائص بشكل آمن في الكائنات التي قد تكون قيمتها null، مما يمنع حدوث أخطاء وقت التشغيل (runtime errors).
void main() {
String? name = 'Dart';
int? length = name?.length;
print('Name: $name');
print('Length: $length');
}مع القيم الفارغة (null)، فإنه يعيد null بدلاً من التعطل:
void main() {
String? name = null;
int? length = name?.length;
print('Name: $name');
print('Length: $length');
}التحدي
سهلأنشئ برنامج Dart يوضح عامل الوصول المدرك للقيم الفارغة (?.) مع شخصية لعبة:
- أنشئ متغير String قابل للقيمة الفارغة (nullable) يسمى
playerNameوقم بتعيينه إلى null - أنشئ متغير int قابل للقيمة الفارغة (nullable) يسمى
playerScoreوقم بتعيينه إلى 100 - استخدم عامل الوصول المدرك للقيم الفارغة (
?.) للحصول على طول playerName وتخزينه في متغير يسمىnameLength - اطبع الرسالة التالية:
Player name length: X(حيث X هي قيمة nameLength) - قم بتحديث
playerNameإلى "Champion" - استخدم عامل الوصول المدرك للقيم الفارغة مرة أخرى للحصول على الطول المحدث وتخزينه في
nameLength - اطبع الرسالة المحدثة:
Player name length: X(حيث X هي القيمة الجديدة) - اطبع نتيجة اللاعب بهذا التنسيق:
Player score: 100
ورقة مرجعية
يقوم عامل الوصول المتنبه للقيم الفارغة (?.) بالوصول إلى الخصائص بأمان في الكائنات التي قد تكون فارغة، مما يمنع أخطاء وقت التشغيل.
عندما لا يكون الكائن فارغاً، فإنه يعيد قيمة الخاصية:
String? name = 'Dart';
int? length = name?.length; // يعيد 4عندما يكون الكائن فارغاً، فإنه يعيد null بدلاً من التوقف المفاجئ:
String? name = null;
int? length = name?.length; // يعيد nullجرّب بنفسك
void main() {
// صرح بمتغيراتك القابلة للقيمة الخالية (nullable) هنا
String? playerName = _;
int? playerScore = _;
// ?. احصل على طول اسم اللاعب باستخدام المعامل
int? nameLength = playerName_.length;
// اطبع الطول الأولي للاسم
print("Player name length: ${nameLength}");
// حدث اسم اللاعب
playerName = _;
// ?. احصل على الطول المحدث باستخدام المعامل
nameLength = playerName_.length;
// اطبع طول الاسم المحدث
print("Player name length: ${nameLength}");
// اطبع نتيجة اللاعب
print("Player score: ${playerScore}");
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات - الجزء الثاني
معاملات المقارنةالمعامل المنطقي ANDالمعامل المنطقي ORالمعامل المنطقي NOTمعاملات فحص النوعملخص - إجراء المقارنات7التعامل مع النصوص (Strings)
دمج النصوص (String Concatenation)تضمين النصوص (String Interpolation)النصوص متعددة الأسطر (Multi-line Strings)خصائص النصوص (String Properties)دوال النصوص الأساسية (String Methods)10المجموعات - أساسيات الخرائط
ما هي الخرائط؟إنشاء خريطةالوصول إلى القيم عبر المفتاحأزواج المفتاح والقيمةالحصول على حجم الخريطةالحصول على المفاتيحالحصول على القيمالتحقق من وجود مفتاح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المجموعات - أساسيات القوائم
ما هي القوائم؟إنشاء قائمةالوصول عبر الفهرسالحصول على طول القائمةإضافة عناصرإزالة عناصرالتحقق مما إذا كانت القائمة فارغةالتكرار عبر القائمة