المنشئات المسماة
جزء من قسم 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 ويساعد في إنشاء كود يوثق نفسه بنفسه.
التحدي
سهللنقم ببناء محول لدرجة الحرارة يستعرض قوة المنشئات المسماة (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() على كل درجة حرارة بالترتيب
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات الـ OOP
الملفات الخارجيةالمكتبات والـ Importsمقدمة في الـ OOPالـ Classes مقابل الـ Objectsالكلمة المفتاحية thisالـ Methodsمتغيرات الـ Instanceأساسيات الـ Constructorمراجعة - آلة حاسبة بسيطة4أمان الـ Null
مقدمة في أمان الـ NullNullable مقابل Non-Nullableعاملا الـ ? و !الكلمة المفتاحية Late وأمان الـ Nullالعوامل المدركة للـ Nullأمان الـ Null في الـ Classesمراجعة - نظام ملف تعريف المستخدم7الفئات المجردة والواجهات
الفئات المجردةالدوال المجردةالواجهات في Dartالواجهات الضمنيةالتنفيذ مقابل التوسيعالواجهات المتعددةمراجعة - حاسبة الأشكال10المجموعات والأنماط العامة
نظرة عامة على List و Set و Mapالمجموعات آمنة النوعالفئات العامةالدوال العامةقيود الأنماط العامةIterable و Iteratorملخص - التخزين العام13مفاهيم OOP المتقدمة
التركيب مقابل الوراثة (Composition vs Inheritance)دوال التوسعة (Extension Methods)الأصناف القابلة للاستدعاء (Callable Classes)الأصناف المختومة (Sealed Classes - Dart 3)السجلات (Records - Dart 3)الأنماط والمطابقة (Patterns & Matching - 3.0)التعدادات مع الدوال (Enums with Methods)2المنشئات في Dart
المنشئ الافتراضيالمنشئات المسماةقوائم التهيئةالمنشئات الثابتةالمنشئات المصنعيةالمنشئات الموجهةملخص - بناء الأشكال5التغليف (Encapsulation)
الأعضاء العامة مقابل الخاصةاتفاقية البادئة _الخصوصية على مستوى المكتبةتعمق في Getters و Settersإخفاء المعلوماتمراجعة - سجلات الطلاب8Mixins
مقدمة إلى Mixinsإنشاء Mixinsاستخدام Mixins متعددةالكلمة المفتاحية on في MixinsMixin مقابل الوراثة (Inheritance)Mixin مقابل الواجهة (Interface)مراجعة - نظام الحيوانات (Animal System)3خصائص الـ Class
أعضاء الـ Instance مقابل الـ Staticحقول Final و Constمتغيرات Lateالـ Static Methods والحقولدوال الـ Getters والـ Settersمراجعة - مدير الحساب البنكي6الوراثة
أساسيات الوراثةالكلمة المفتاحية superإعادة تعريف الدوال (Method Overriding)الوسم @overrideالكلمة المفتاحية final Classالدوال البانية والوراثةمراجعة - هيكلية الموظفين9تعدد الأشكال
أساسيات تعدد الأشكالتعدد الأشكال عبر الـ Interfacesالتحقق من النوع أثناء التشغيلالمعاملات is و asالكلمة المفتاحية Covariantملخص - معالج الدفع12البرمجة الكائنية غير المتزامنة (Async OOP)
Futures و async/awaitأساسيات الـ Streamsمتحكمات الـ Streamsالـ Constructors غير المتزامنةالعمليات غير المتزامنة في دوال الكلاسمراجعة - جالب البيانات (Data Fetcher)15أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المستودع