Sound Null Safety (Dart)
آخر تحديث: منذ 0 ثانية
· 13 مشاهدة
Sound Null Safety (Dart)
- Dart بتفرض إن كل متغير يكون إما non-nullable (لا يقبل null) أو nullable (تضيف
?). - لو كتبت
String name;لازم تعطيه قيمة قبل ما تستخدمه، أماString? name;يبقى ممكن يكونnull. - الفايدة: الكومبايلر يضمن إنك ما تستخدمش قيمة null بدون ما تتأكد منها، فبيقلل الأخطاء اللي تظهر وقت التشغيل.
- لما تتعامل مع nullable، استخدم:
if (name != null) …قبل الاستخدام.name!عشان تقول “أنا متأكد إنها مش null” (بس خليك حذر).name?.lengthعشان تستدعي property بس لو مش null.
- آرزتك (libraries) كمان لازم تكتب null-safe عشان تتوافق، وتقدر تشغل
dart migrateعلشان تترفع لمستوى Null Safety في مشروعك.
Null Pointer Exception (خطأ الوصول إلى null)
- يحصل لما تحاول تستخدم قيمة
nullكأنها موجودة: مثلاً تستدعيname.lengthلماnameنفسهاnull. - Dart مع Sound Null Safety يمنعك من ده لأنك لازم تكتب
String? nameلو ممكن تكون فارغة، وcompilier يطلب منك تتحقق قبل الاستخدام. - لو اشتغلت في كود قديم أو جبت بيانات من API، استخدم:
if (name != null) { print(name.length); }name?.length→ لماnamenull يعطيnullبدون خطأ.name ?? 'default'→ يدي قيمة احتياطية لو null.
- لو بتحصل لك Null Pointer في تطبيق لاراڤيل/سيرفر، راجع الـ data أو الـ request اللي داخلة وتأكد المتغيرات ما فيهاش null قبل ما تقابلها.
- حابب أوريك مثال عملي بلغة Dart أو نضيف helper function للتحقق؟
dart
void main() {
String? greeting;
print(greeting.length);
}
في الكود ده
greeting معرف كـ String? يعني ممكن تكون null. لما تكتب greeting.length، Dart ترفض لأنك بتحاول تشوف طول قيمة ممكن تكون null → ده اللي بيسبب Null Pointer exception.
الحل:
dart
void main() {
String? greeting;
print(greeting?.length); // يطبع null بدل ما يكسّر
}
أو تعطي قيمة افتراضية قبل ما تستخدمها:
dart
print(greeting?.length ?? 0);
ولو متأكد إنها مش هتكون null في اللحظة دي:
dart
print(greeting!.length);
لكن خليك حذر مع !؛ استخدمه بس لما تكون متأكد 100%.
Null-Safe Operators (Dart)
?.calls a member only if the value isn’t null:greeting?.length→nullifgreetingis null, otherwise length.??gives a fallback:greeting ?? "hi"returns"hi"whengreetingis null.??=assigns only when null:greeting ??= "hello"sets it if not already set.!asserts non-null:greeting!.lengthtells Dart “I know this isn’t null”—use only when you’re sure, otherwise runtime error.?..is like?.but for cascades:myList?..add(1)only runs ifmyListisn’t null.
هذه الأدوات تحميك من Null Pointer errors وتخلي الكود أنظف. تريد أعمل مثال عملي بأي واحد فيهم؟