الكونستركتور Constructor في Dart 13 - Programmer Tech
Dart and flutter

الكونستركتور Constructor في Dart 13

الكونستركتور في دارت

الكونستركتور Constructor في Dart

الكونستركتور Constructor في دارت, تسهل علينا طريقة انشاء كائنات من كلاس معين وتعتبر شيئ مهم يجب التفكير به بعد إنشاء الكلاس. وهو عبارة عن دالة يكون لها نوع خاص, يتم إستدعاء هذه الدالة في أثناء إنشاء الكائن من أجل توليد قيم أولية للخصائص الموجودة فيه.

في لغة برمجة دارت (Dart)، يُعتبر “Constructor” هو الطريقة المستخدمة لإنشاء وتهيئة كائن من الفئة (Class). يتم استدعاء الكونستركتور عند إنشاء كائن جديد من الفئة.

في دارت، يمكنك تعريف الكونستركتور باستخدام كلمة المفتاح “constructor” متبوعة بسمة الكونستركتور وقائمة البارامترات المطلوبة إذا كانت هناك. هناك نوعان رئيسيان من الكونستركتورات:

1 – Default Constructor:

يعتبر هذا الكونستركتور الافتراضي وهو يُنشئ كائنًا جديدًا بدون تمرير أي بيانات إليه. إليك مثال:

class MyClass {
  MyClass() {
    // تنفيذ البناء الافتراضي
  }
}
```

يمكنك استخدام الكونستركتور الافتراضي كالتالي:

````dart
var myObject = MyClass();
```

2 – Parameterized Constructor:

يُستخدم هذا النوع من الكونستركتور لتمرير بيانات إضافية عند إنشاء الكائن. يمكنك تعيين قيم المعاملات الممررة إلى الخصائص الداخلية للكائن. إليك مثال:

class MyClass {
  String name;
  int age;

  MyClass(String name, int age) {
    this.name = name;
    this.age = age;
  }
}
```

يمكنك استخدام الكونستركتور المعلم بالبارامترات كالتالي:

````dart
var myObject = MyClass("John", 25);
```

يمكنك أيضًا استخدام اختصارات الكونستركتور في دارت مثل `this.name` و `this.age` للإشارة إلى الخصائص الداخلية مباشرةً بدون استخدام البريد الإلكتروني "this".

هذه هي الأساسيات الخاصة بتعريف واستخدام الكونستركتورات في دارت. يمكنك تخصيص الكونستركتورات بمزيد من المنطق والمعاملات حسب احتياجاتك في الفئات الخاصة بك.

الشكل العام

Class_name(parameter_list) { 
   //constructor body 
}
  1. class_name هو اسم الكلاس التي يتم إنشاءه للكونستركتور.
  2. parameter_list هي ميزات اختيارية ويمكن ولا يمكن تحديدها للكونستركتور. لا يحتوي الكونستركتور الافتراضي على باراميترات محددة فيه.
  3. constructor body جسم الكونستركتور هو جسم الكونستركتور ويتم تنفيذه عند استدعاء الكونستركتور أي عند إنشاء كائن.

ليس اللكونستركتور أي نوع إرجاع.

مثال

void main() { 
   Car c = new Car('BMW'); 
} 
class Car { 
   Car(String engine) { 
      print(engine); 
   } 
}

قمنا بإنشاء كلاس وهو Car و هذا الكلاس يقوم بطباعة نوع السيارة الموجودة في الكائن c الذي إشتقيناه.

عند تشغيل الكود يجب أن ينتج الناتج التالي :

.
BMW

كونستراكتور افتراضي:

class Person {
  String name;
  int age;

  Person(this.name, this.age);
}

// استخدام الكونستراكتور
var person = Person("John Doe", 30);

يتم استخدام الكونستراكتور الافتراضي لإنشاء كائن من الفئة Person. يتم تمرير قيمة لكل من البارامترات name و age عند إنشاء الكائن.

كونستراكتور بدون بارامترات:

class Circle {
  double radius;

  Circle() {
    radius = 0.0;
  }
}

// استخدام الكونستراكتور
var circle = Circle();

يتم استخدام الكونستراكتور بدون بارامترات لإنشاء كائن من الفئة Circle. في هذا المثال، يتم تعيين قيمة افتراضية للبارامتر radius كـ 0.0.

كونستراكتور بارامترات اختيارية:

class Rectangle {
  double width;
  double height;

  Rectangle({this.width = 0.0, this.height = 0.0});
}

// استخدام الكونستراكتور
var rectangle1 = Rectangle();
var rectangle2 = Rectangle(width: 5.0, height: 10.0);

يتم استخدام الكونستراكتور بارامترات اختيارية لإنشاء كائن من الفئة Rectangle. يكون للبارامترات قيم افتراضية محددة، وبالتالي يمكن تمرير قيم للبارامترات عند الحاجة أو استخدام القيم الافتراضية إذا لم يتم تمرير قيم.

هذه هي بعض الأمثلة الأساسية للاستخدامات الشائعة للكونستراكتور (Constructor) في لغة Dart. يمكنك استخدام الكونستراكتورات لتهيئة الكائنات وتمرير البيانات اللازمة لها عند الإنشاء.

مثال

void main() {           
   Car c1 = new Car.namedConst('BMW');                                       
   Car c2 = new Car(); 
}           
class Car {                   
   Car() {                           
      print("Non-parameterized constructor invoked");
   }                                   
   Car.namedConst(String engine) { 
      print("The engine is : ${engine}");    
   }                               
}

أنشأنا كلاس و هو Car و به كونستركتور Car و يقوم بطباعة الكونستركتور عبر هذا الباراميتر اي اسم السيارة,

عند تشغيل الكود يجب أن ينتج الناتج التالي

The engine is : BMW 
Non-parameterized constructor invoked

استخدام أكثر من كونستركتور في نفس الكلاس

نعم، يمكنك استخدام أكثر من كونستركتور في نفس الفئة في لغة Dart. يُطلق على هذه الميزة اسم “الكونستركتورات المُسماة” (Named Constructors). تسمح لك الكونستركتورات المُسماة بتعريف مجموعة من الكونستركتورات التي تأخذ تكوينًا مختلفًا أو تقوم بمهام إضافية.

لتعريف كونستركتور مسمى، استخدم الكلمة المفتاحية “factory” مع اسم الكونستركتور. اسم الكونستركتور يتم تحديده بنفسك ويمكن أن يكون أي اسم صالح في دارت. إليك مثال يوضح كيفية استخدام الكونستركتورات المسماة:

class MyClass {
  String name;
  int age;

  MyClass(this.name, this.age); // كونستركتور افتراضي

  MyClass.fromBirthYear(int birthYear) { // كونستراكتور مسمى
    this.name = "Unknown";
    this.age = DateTime.now().year - birthYear;
  }
}

في المثال أعلاه، يوجد كونستركتور افتراضي يأخذ اسمًا وعمرًا كمعاملات. بالإضافة إلى ذلك، يوجد كونستراكتور مسمى يُسمى “fromBirthYear” يأخذ سنة الميلاد كمعامل ويقوم بحساب العمر استنادًا إلى السنة الحالية.

يمكن استخدام الكونستراكتورات المسماة لإنشاء كائنات بطرق مختلفة، على سبيل المثال:

var myObject1 = MyClass("John", 25); // استخدام الكونستراكتور الافتراضي
var myObject2 = MyClass.fromBirthYear(1990); // استخدام الكونستراكتور المسمى

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

تعيين قيم افتراضية للبارامترات في الكونستركتور

يمكن تعيين قيم افتراضية للبارامترات في الكونستراكتور في لغة Dart. هذا يسمح لك بتحديد قيم تلقائية للبارامترات إذا لم يتم تمرير قيم لها عند إنشاء الكائن. يمكنك استخدام القيم الافتراضية للبارامترات لتسهيل عملية الإنشاء والتهيئة الأولية للكائن.

لتعيين قيم افتراضية للبارامترات في الكونستراكتور، يمكنك تحديد القيم المفترضة مباشرة في تعريف البارامترات. إليك مثال يوضح كيفية تعيين قيم افتراضية للبارامترات في الكونستراكتور:

class MyClass {
  String name;
  int age;

  MyClass({String name = 'Unknown', int age = 0}) {
    this.name = name;
    this.age = age;
  }
}

في المثال أعلاه، يوجد كونستراكتور يحتوي على اثنين من البارامترات المسماة: “name” و “age”. تم تعيين القيم المفترضة لكل بارامتر، حيث يكون الاسم “Unknown” والعمر 0. إذا لم يتم تمرير قيم للبارامترات عند إنشاء الكائن، فسيتم استخدام القيم الافتراضية المحددة.

يمكن استخدام الكونستراكتور مع القيم الافتراضية كالتالي:

var myObject1 = MyClass(); // يستخدم القيم الافتراضية
var myObject2 = MyClass(name: 'John', age: 25); // يتم تعديل القيم الافتراضية

في الأمثلة أعلاه، يتم إنشاء كائنين من الفئة MyClass. يتم استخدام القيم الافتراضية في الكائن myObject1 حيث لم يتم تمرير قيم للبارامترات. بينما يتم تعديل القيم الافتراضية في الكائن myObject2 عن طريق تمرير قيم مخصصة للبارامترات.

باستخدام تعيين القيم الافتراضية للبارامترات في الكونستراكتور، يمكنك توفير قيم افتراضية ملائمة للبارامترات وتجنب ضرورة تمرير القيم في كل مرة تنشئ فيها كائنًا جديدًا.

استدعاء كونستركتور من كونستركتور آخر في دارت

في لغة Dart، يمكنك استدعاء كونستركتور من كونستركتور آخر في نفس الفئة باستخدام الكلمة المفتاحية this. يُطلق على هذه العملية “استدعاء الكونستركتور الآخر” (Constructor Chaining)، حيث يتم استدعاء كونستركتور آخر لتنفيذ بعض العمليات المشتركة أو لتجنب إعادة كتابة الكود.

لكي تستدعي كونستركتور آخر، يمكنك استخدام الكلمة المفتاحية this مع قائمة المعاملات المطلوبة للكونستركتور الآخر. يجب أن يتم استدعاء الكونستركتور الآخر قبل تنفيذ أي تعليمات أخرى في الكونستركتور الحالي. إليك مثال يوضح كيفية استدعاء كونستركتور آخر في دارت:

class MyClass {
  String name;
  int age;

  MyClass(this.name, this.age); // كونستراكتور افتراضي

  MyClass.fromBirthYear(int birthYear) : this("Unknown", DateTime.now().year - birthYear);
}

في المثال أعلاه، يوجد كونستراكتور افتراضي يأخذ اسمًا وعمرًا كمعاملات. يوجد أيضًا كونستراكتور آخر يُسمى fromBirthYear يأخذ سنة الميلاد كمعامل. يتم استدعاء الكونستراكتور الأول باستخدام this في الكونستراكتور الثاني لتمرير القيم المستخدمة في الكونستراكتور الأول.

يمكن استخدام الكونستراكتور المستدعى كالتالي:

var myObject = MyClass.fromBirthYear(1990);
.

في المثال أعلاه، يتم استدعاء الكونستراكتور fromBirthYear وتمرير قيمة 1990 كمعامل. سيتم استدعاء الكونستراكتور الأول MyClass(this.name, this.age) بواسطة this لتنفيذه وتهيئة الكائن myObject.

باستخدام استدعاء الكونستراكتورات الآخرى، يمكنك تقليل تكرار الكود وتنظيم عملية البناء في الفئة.

 

لمشاهدة الدرس فيديو لفهمه اكثر قم بتشغيل الفيديو الاتي

Ahmedkaissar

من مصر من محافظة الجيزة مبرمج ويب و خبير أمن معلومات محب للتقنية و الأمن المعلوماتي مدرب للغات "Python,html, css, php, js, laravel"
زر الذهاب إلى الأعلى