ملخص - التعامل مع الـ Null بأمان
جزء من قسم Fundamentals في رحلة Dart على Coddy — الدرس 82 من 94.
التحدي
سهلأنت تقوم ببناء نظام لملف تعريف المستخدم لتطبيق جوال. قم بإنشاء فئة UserProfile توضح فهمك لميزات سلامة القيم الخالية (null safety) في لغة Dart.
قم بتنفيذ فئة UserProfile مع ما يلي:
- خصائص غير قابلة للقيمة الخالية (Non-nullable) (يجب أن تحتوي دائماً على قيمة):
idمن نوعintcreatedDateمن نوعString
- خصائص قابلة للقيمة الخالية (Nullable) (يمكن أن تكون null عند التهيئة):
nameمن نوعString?emailمن نوعString?ageمن نوعint?
- خاصية متأخرة التهيئة (Late-initialized):
displayNameمن نوعString، يتم التصريح عنها باستخدام الكلمة المفتاحيةlate
- المُنشئ (Constructor):
- يقبل
idوcreatedDateكمعلمات مطلوبة - يهيئ
displayNameإلى"Guest"
- يقبل
الدالة:
<strong>void printProfile()</strong>تقوم بطباعة ملف تعريف المستخدم بالتنسيق التالي:User Profile: ID: <id> Created: <createdDate> Name: <name or 'Not provided'> Email: <email or 'Not provided'> Age: <age or 'Not provided'> Display Name: <displayName> -------------------- الدالة:
<strong>void updateEmail(String? newEmail)</strong>- تقوم بتحديث خاصية
emailبالقيمة الجديدة.
- تقوم بتحديث خاصية
- الدالة:
<strong>String getDisplayName()</strong>- إذا لم يكن
nameفارغاً (null)، تقوم بتعيينdisplayName = name!(باستخدام عامل تأكيد القيمة غير الخالية null assertion operator) - تعيد القيمة الحالية لـ
displayName
- إذا لم يكن
هام: بعد تحديث خاصية name، يجب عليك استدعاء getDisplayName() لتحديث حقل displayName قبل طباعة ملف التعريف مرة أخرى.
أكمل الكود لإنشاء ملف تعريف، وتحديثه، وعرض المعلومات كما هو موضح في المخرجات المتوقعة.
جرّب بنفسك
void main() {
// إنشاء ملف تعريف مستخدم
final profile = UserProfile(1, 'today');
// طباعة ملف التعريف الأولي
profile.printProfile();
// تحديث ملف التعريف
profile.name = 'John Doe';
profile.updateEmail('john@example.com');
profile.age = 30;
// تحديث اسم العرض وطباعة ملف التعريف المحدث
profile.getDisplayName(); // استدعِ هذا لتحديث displayName
profile.printProfile();
}
class UserProfile {
// TODO: إضافة الخصائص (id, createdDate, name, email, age, displayName)
// TODO: إنشاء المنشئ (constructor)
// TODO: تنفيذ طريقة printProfile()
// TODO: تنفيذ طريقة updateEmail()
// TODO: تنفيذ طريقة getDisplayName()
}جميع دروس 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المجموعات - أساسيات القوائم
ما هي القوائم؟إنشاء قائمةالوصول عبر الفهرسالحصول على طول القائمةإضافة عناصرإزالة عناصرالتحقق مما إذا كانت القائمة فارغةالتكرار عبر القائمة