✏️ تعديل: Sound Null Safety (Dart)
تعديل محتوى الموضوع
→ رجوع للموضوع
عنوان الموضوع
التصنيف
التاقات (مفصولة بفاصلة)
ملاحظة التعديل (اختياري)
المحتوى
**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` → لما `name` null يعطي `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` → `null` if `greeting` is null, otherwise length. - `??` gives a fallback: `greeting ?? "hi"` returns `"hi"` when `greeting` is null. - `??=` assigns only when null: `greeting ??= "hello"` sets it if not already set. - `!` asserts non-null: `greeting!.length` tells 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 if `myList` isn’t null. هذه الأدوات تحميك من Null Pointer errors وتخلي الكود أنظف. تريد أعمل مثال عملي بأي واحد فيهم؟ [[late]]
👁️ معاينة فورية
💡 كل بلوك قابل للسحب والترتيب. يدعم
Markdown
:
## عنوان
·
**bold**
·
- قائمة
·
```dart code```
·
[[اسم الموضوع]]
💾 حفظ التعديلات