در زبان دارت، سازندهها (Constructors) به عنوان توابعی هستند که برای ساخت شیء از یک کلاس استفاده میشوند. در ادامه، انواع سازندهها در زبان دارت را شرح میدهیم:
- سازنده پیشفرض (Default Constructor): این سازنده به صورت خودکار توسط زبان دارت تعریف میشود و هیچ پارامتری نمیگیرد. این سازنده برای ساخت یک شیء از یک کلاس، به صورت پیشفرض فراخوانی میشود.
- سازندههای پارامتری (Parameterized Constructors): این سازندهها یک یا چند پارامتر دریافت میکنند و برای ساخت شیء از یک کلاس با مقادیر خاص، استفاده میشوند.
- سازندههای فابریک (Factory Constructors): این سازندهها با استفاده از یک متد، یک شیء از کلاس مورد نظر را ایجاد میکنند. این سازندهها معمولاً برای پنهانکردن جزئیات ساختار کلاس استفاده میشوند.
- سازندههای نامگذاری شده (Named Constructors): این سازندهها با استفاده از یک نام خاص، یک شیء از کلاس مورد نظر را ایجاد میکنند. این سازندهها معمولاً برای ساخت شیء با ویژگیهای خاص استفاده میشوند.
- سازندههای کپی (Copy Constructors): این سازندهها یک شیء از یک کلاس را به عنوان ورودی دریافت میکنند و یک شیء دیگر با مقادیر مشابه ایجاد میکنند.
- سازندههای مخرب (Destructors): این سازندهها برای حذف یک شیء از یک کلاس از حافظه استفاده میشوند. سازندههای مخرب تنها یکبار فراخوانی میشوند و همیشه برای هر شیء از یک کلاس وجود دارند.
- سازندههای فرعی (Secondary Constructors): این سازندهها به عنوان گزینهای برای سازندههای پیشفرض و پارامتری وجود دارند. با استفاده از این سازندهها، میتوانیم برای ساخت شیء از یک کلاس، از روش دیگری به جای سازندههای پیشفرض یا پارامتری استفاده کنیم.
- سازندههای کلاس انتزاعی (Abstract Class Constructors): این سازندهها برای ساخت شیء از یک کلاس انتزاعی (Abstract Class) استفاده میشوند. این سازندهها معمولاً در کلاس انتزاعی تعریف میشوند و در کلاسهای فرعی (Subclasses) به صورت پیشفرض فراخوانی میشوند.
- سازندههای بدون اثر (No-Op Constructors): این سازندهها برای کلاسهایی که نیاز به سازنده ندارند، تعریف میشوند. این سازندهها هیچ عملی انجام نمیدهند و تنها برای کامل کردن ساختار کلاس استفاده میشوند.
در زبان دارت، انواع مختلفی از سازندهها وجود دارند که هر کدام برای موارد خاصی استفاده میشوند. با درک انواع سازندهها، میتوانید بهترین روش برای ساخت شیء از یک کلاس را انتخاب کنید.
به عنوان یک مثال ساده، فرض کنید که میخواهیم یک کلاس ساده برای نمایش اطلاعات یک شخص ایجاد کنیم. در این کلاس، میتوانیم از یک سازنده پارامتری برای تعیین مقادیر نام و سن استفاده کنیم، و همچنین یک سازنده پیشفرض برای تنظیم مقادیر پیشفرض نام و سن.
class Person {
String name;
int age;
// سازنده پیشفرض
Person() {
name = "Unknown";
age = 0;
}
// سازنده با پارامترها
Person(String name, int age) {
this.name = name;
this.age = age;
}
// تابع نمایش اطلاعات شخص
void displayInfo() {
print("Name: $name, Age: $age");
}
}
void main() {
// ایجاد یک شیء از کلاس Person با استفاده از سازنده پیشفرض
var p1 = Person();
p1.displayInfo(); // نمایش اطلاعات شخص با مقادیر پیشفرض
// ایجاد یک شیء از کلاس Person با استفاده از سازنده با پارامترها
var p2 = Person("John", 30);
p2.displayInfo(); // نمایش اطلاعات شخص با مقادیر دلخواه
}
در مثال بالا با استفاده از سازنده پیشفرض، مقادیر پیشفرض نام و سن برای شخص تنظیم میشود و با استفاده از سازنده با پارامترها، میتوانیم نام و سن دلخواه را برای شخص تعیین کنیم. سپس با فراخوانی تابع displayInfo
، اطلاعات شخص نمایش داده میشود.
یک مثال دیگر میتواند کلاسی برای نمایش اطلاعات یک خودرو باشد. در این کلاس، میتوانیم از سازنده پیشفرض برای تعیین مقادیر پیشفرض برای خودرو (مانند نام و برند) استفاده کنیم، و همچنین از یک سازنده با پارامترها برای تعیین اطلاعات خودرو ( مانند نوع موتور و سال ساخت )
class Car {
String brand;
String name;
String engineType;
int year;
// سازنده پیشفرض
Car() {
brand = "Unknown";
name = "Unknown";
}
// سازنده با پارامترها
Car(String brand, String name, String engineType, int year) {
this.brand = brand;
this.name = name;
this.engineType = engineType;
this.year = year;
}
// تابع نمایش اطلاعات خودرو
void displayInfo() {
print("$brand $name ($year) - $engineType");
}
}
void main() {
// ایجاد یک شیء از کلاس Car با استفاده از سازنده پیشفرض
var car1 = Car();
car1.displayInfo(); // نمایش اطلاعات خودرو با مقادیر پیشفرض
// ایجاد یک شیء از کلاس Car با استفاده از سازنده با پارامترها
var car2 = Car("Toyota", "Corolla", "Petrol", 2020);
car2.displayInfo(); // نمایش اطلاعات خودرو با مقادیر دلخواه
}
در مثال بالا با استفاده از سازنده پیشفرض، مقادیر پیشفرض برای خودرو (مانند نام و برند) تعیین میشود و با استفاده از سازنده با پارامترها، میتوانیم اطلاعات خودرو را (مانند نوع موتور و سال ساخت) برای آن تعیین کنیم. سپس با فراخوانی تابع displayInfo
، اطلاعات خودرو نمایش داده میشود.