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

المنشئات المسماة

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

تسمح لك المنشئات المسماة (Named constructors) بإنشاء منشئات متعددة لفئة (class) معينة، بحيث يكون لكل منها اسم وصفي يوضح الغرض منها. وهذا مفيد بشكل خاص عندما تحتاج إلى طرق مختلفة لتهيئة كائن (object) ما.

يستخدم بناء الجملة اسم الفئة متبوعاً بنقطة واسم المنشئ:

class Point {
  int x;
  int y;

  // منشئ عادي
  Point(this.x, this.y);

  // منشئ مسمى لنقطة الأصل
  Point.origin() : x = 0, y = 0;

  // منشئ مسمى من قيمة واحدة
  Point.diagonal(int value) : x = value, y = value;
}

يوفر كل منشئ مسمى (named constructor) طريقة واضحة ومقروءة لإنشاء الكائنات:

Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);

print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)

تجعل المنشئات المسماة (Named constructors) كودك أكثر تعبيراً. فبدلاً من التخمين حول ما يعنيه Point(0, 0)، فإن Point.origin() يوضح الغرض فوراً. هذا النمط شائع في مكتبات Dart ويساعد في إنشاء كود يوثق نفسه بنفسه.

challenge icon

التحدي

سهل

لنقم ببناء محول لدرجة الحرارة يستعرض قوة المنشئات المسماة (named constructors). ستقوم بإنشاء فئة Temperature يمكن تهيئتها بطرق مختلفة اعتماداً على الوحدة التي تبدأ بها.

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

  • temperature.dart: قم بتعريف فئة Temperature مع متغير مثيل double celsius. يجب أن توفر الفئة الخاصة بك ثلاث طرق لإنشاء درجة حرارة:
    • منشئ عادي Temperature(this.celsius) يأخذ قيمة مئوية مباشرة.
    • منشئ مسمى Temperature.fromFahrenheit يقبل قيمة بالفهرنهايت ويحولها إلى مئوية باستخدام الصيغة: (fahrenheit - 32) * 5 / 9.
    • منشئ مسمى Temperature.freezing() ينشئ درجة حرارة عند نقطة التجمد (0 درجة مئوية).
    أضف دالة display() تقوم بطباعة: [celsius]C
  • main.dart: قم باستيراد فئة درجة الحرارة الخاصة بك وأنشئ ثلاثة كائنات لدرجة الحرارة:
    • واحد باستخدام المنشئ العادي مع 25.0.
    • واحد باستخدام fromFahrenheit مع 98.6.
    • واحد باستخدام freezing().
    قم باستدعاء display() على كل درجة حرارة بالترتيب المذكور أعلاه.

تنسيق المخرجات المتوقع:

25.0C
37.0C
0.0C

ورقة مرجعية

تسمح لك المنشئات المسماة (Named constructors) بإنشاء منشئات متعددة لفئة برمجية (class) بأسماء وصفية توضح الغرض منها.

تستخدم الصيغة اسم الفئة متبوعاً بنقطة واسم المنشئ:

class Point {
  int x;
  int y;

  // منشئ عادي
  Point(this.x, this.y);

  // منشئ مسمى لنقطة الأصل
  Point.origin() : x = 0, y = 0;

  // منشئ مسمى من قيمة واحدة
  Point.diagonal(int value) : x = value, y = value;
}

استخدام المنشئات المسماة:

Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);

print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)

تجعل المنشئات المسماة الكود أكثر تعبيراً وتوثيقاً ذاتياً من خلال توصيل الغرض بوضوح.

جرّب بنفسك

import 'temperature.dart';

void main() {
  // TODO: قم بإنشاء درجة حرارة (Temperature) باستخدام المنشئ العادي بقيمة 25.0
  
  // TODO: قم بإنشاء درجة حرارة (Temperature) باستخدام fromFahrenheit بقيمة 98.6
  
  // TODO: قم بإنشاء درجة حرارة (Temperature) باستخدام freezing()
  
  // TODO: قم باستدعاء display() على كل درجة حرارة بالترتيب
}
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming