Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

قوائم التهيئة

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 12 من 110.

تُعد قائمة التهيئة (initializer list) هي الكود الذي يظهر بعد النقطتين الرأسيتين في المنشئ، قبل جسم المنشئ. يتم تنفيذها قبل تشغيل جسم المنشئ وتُستخدم لتهيئة متغيرات النسخة.

لقد رأيت بالفعل قوائم التهيئة في الدروس السابقة:

Point.origin() : x = 0, y = 0;

الجزء الذي يلي النقطتين (x = 0, y = 0) هو قائمة التهيئة. يتم الفصل بين عمليات التهيئة المتعددة بفاصلات.

تعتبر قوائم التهيئة (Initializer lists) ضرورية عند التعامل مع متغيرات final، والتي يجب تعيين قيمتها قبل تنفيذ جسم المنشئ (constructor body):

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area);   // 78.53975

يمكن لقائمة التهيئة (initializer list) أيضاً إجراء حسابات أو تحويلات على معاملات المنشئ (constructor parameters) قبل تعيينها. وهذا مفيد عندما تحتاج إلى اشتقاق قيم أو التحقق من صحة البيانات أثناء إنشاء الكائن.

يمكنك دمج صيغة this. المختصرة مع قائمة التهيئة (initializer list):

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0

هنا، يتم تعيين width و height عبر الاختصار، بينما يتم حساب area في قائمة التهيئة (initializer list) باستخدام تلك القيم.

challenge icon

التحدي

سهل

لنقم ببناء حاسبة لأبعاد الصندوق تستخدم قوائم التهيئة (initializer lists) لحساب القيم المشتقة عند إنشاء الكائنات.

ستقوم بتنظيم الكود الخاص بك في ملفين:

  • box.dart: قم بتعريف فئة Box تمثل صندوقاً ثلاثي الأبعاد بأبعاد وخصائص يتم حسابها تلقائياً. يجب أن تحتوي الفئة الخاصة بك على:
    • ثلاثة حقول من نوع final double وهي: length، و width، و height
    • حقلين محسوبين من نوع final double وهما: volume و surfaceArea
    • منشئ (constructor) يأخذ length، و width، و height باستخدام اختصار this.، ويستخدم قائمة تهيئة لحساب volume (الطول × العرض × الارتفاع) و surfaceArea (2 × (الطول×العرض + العرض×الارتفاع + الارتفاع×الطول))
    • طريقة display() تقوم بطباعة معلومات الصندوق
  • main.dart: قم باستيراد فئة الصندوق الخاصة بك وإنشاء صندوقين:
    • صندوق بأبعاد 3.0، 4.0، 5.0
    • صندوق بأبعاد 2.0، 2.0، 2.0
    قم باستدعاء display() لكل صندوق بالترتيب المذكور.

يجب أن تقوم الطريقة display() بالطباعة بهذا التنسيق تماماً:

Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]

المخرجات المتوقعة:

Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0

ورقة مرجعية

تُعد قائمة التهيئة (initializer list) كوداً يظهر بعد النقطتين الرأسيتين في المنشئ (constructor)، وقبل جسم المنشئ. يتم تشغيلها قبل تنفيذ جسم المنشئ وتُستخدم لتهيئة متغيرات النسخة (instance variables).

الصيغة الأساسية مع تهيئات متعددة مفصولة بفاصلة:

Point.origin() : x = 0, y = 0;

تعتبر قوائم التهيئة ضرورية لمتغيرات final، والتي يجب تعيين قيمتها قبل تشغيل جسم المنشئ:

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

يمكنك دمج صيغة this. المختصرة مع قائمة تهيئة لتعيين بعض الحقول مباشرة وحساب الحقول الأخرى:

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

يمكن لقائمة التهيئة إجراء حسابات أو تحويلات على معاملات المنشئ قبل تعيينها، وهو أمر مفيد لاشتقاق القيم أثناء إنشاء الكائن.

جرّب بنفسك

import 'box.dart';

void main() {
  // TODO: قم بإنشاء صندوق بأبعاد 3.0، 4.0، 5.0
  
  // TODO: قم بإنشاء صندوق بأبعاد 2.0، 2.0، 2.0
  
  // TODO: استدعِ display() على كل صندوق بالترتيب
  
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming