Null Safety في Dart يميز الأنواع القابلة لـ null ويكشف أخطاء مبكرًا، لكنه لا يجعل استخدام ! أو late آمنًا دون تحقق من منطق البرنامج.
النوع يعبّر عن احتمال الغياب
String يقبل نصًا غير null، بينما String? يسمح بـ null. السلسلة الفارغة قيمة نصية مختلفة عن null، لذلك اختر معنى واضحًا للبيانات بدل تحويل كل غياب إلى نص فارغ. استخدم ?. للوصول المشروط و?? لاختيار قيمة افتراضية عندما يكون الغياب متوقعًا.
التحقق أفضل من افتراض النجاح
بعد فحص متغير محلي قابل للترقية يستطيع المحلل معرفة أنه غير null في المسار المناسب. العامل ! يفرض افتراضك وقد يرمي خطأ وقت التشغيل إذا كان خاطئًا؛ ليس أمرًا لمعالجة غياب البيانات. late يسمح بتأخير التهيئة لكنه يحتاج تعيينًا قبل القراءة، ولا يضمن أن دورة حياة الواجهة نفذته.
واجهات API وتحليل JSON
البيانات الخارجية قد تفتقد حقلًا أو تعيد نوعًا مختلفًا. افحص بنية الاستجابة عند حدود النظام وحوّلها إلى نموذج واضح، ثم أعرض حالة تحميل أو خطأ أو قيمة غير متاحة في الواجهة. لا تضع ! على جميع الحقول لإسكات المحلل. اختبر غياب الاسم والنص الفارغ ونجاح التحليل بدل الاكتفاء بحالة واحدة.
مثال للتطبيق
String greeting(String? name) {
final value = name?.trim();
if (value == null || value.isEmpty) return 'مرحبا بالزائر';
return 'مرحبا $value';
}
void main() {
print(greeting(null));
print(greeting(' أحمد '));
}المرجع الرسمي
للتفاصيل الخاصة بإصدار الأداة وبيئة التشغيل، راجع توثيق Null Safety في Dart. قد تختلف أسماء القوائم بين الإصدارات؛ طابق الإعداد مع مشروعك قبل تطبيقه.






