تُعدّ الـ Getter في لغة برمجة دارت (Dart) أحد الأدوات المهمة في برمجة الكائنات OOP. يستخدم الـ Getter للحصول على قيمة خاصية معينة، وغالبًا ما يُستخدم للوصول إلى قيمة خاصية خاصة (Private Property) في الكائن. يوفر الـ Getter وصولًا صريحًا إلى خصائص الكائن.
الصيغة العامة للـ Getter في دارت
يتم تعريف الـ Getter في دارت باستخدام الصيغة التالية:
return_type get property_name { // Getter body }
ملاحظة: بدلاً من كتابة الأقواس المُنعقدة {}
بعد اسم الخاصية، يمكن أيضًا استخدام السهم السميك =>
بعد اسم الخاصية.
أهمية الـ Getter في دارت
- الوصول إلى قيمة خاصية Private: يُمكن استخدام الـ Getter للوصول إلى قيمة خاصية تكون محددة كخاصية خاصة (Private Property) في الكائن.
- تقييد الوصول الى البيانات في الكلاس: يُمكن استخدام الـ Getter لتقييد الوصول الى البيانات في الكلاس وجعلها قابلة للقراءة فقط من الخارج.
أمثلة على الـ Getter في دارت:
المثال 1: استخدام الـ Getter في دارت
لنفترض أن لدينا كلاس يدعى Person يحتوي على خاصيتين هما firstName وlastName. سنقوم بإنشاء Getter يُسمى fullName للحصول على الاسم الكامل للشخص.
class Person { // الخصائص String? firstName; String? lastName; // Constructor Person(this.firstName, this.lastName); // الـ Getter String get fullName => "$firstName $lastName"; } void main() { Person p = Person("John", "Doe"); print(p.fullName); }
نتيجة الكود:
John Doe
المثال 2: استخدام الـ Getter في دارت
فلنفترض أن لدينا كلاس يدعى NoteBook يحتوي على خاصيتين Private هما _name و _prize. سنقوم بإنشاء 2 Getter هما name و prize للوصول إلى قيم الخصائص.
class NoteBook { // الخصائص الخاصة String? _name; double? _prize; // Constructor NoteBook(this._name, this._prize); // الـ Getter للوصول إلى الخاصية الخاصة _name String get name => _name!; // الـ Getter للوصول إلى الخاصية الخاصة _prize double get prize => _prize!; } void main() { // إنشاء كائن من الكلاس NoteBook NoteBook nb = NoteBook("Dell", 500); // عرض قيم الكائن print(nb.name); print(nb.prize); }
نتيجة الكود:
Dell 500.0
المثال 3: استخدام الـ Getter في التحقق من صحة البيانات
فلنفترض أن لدينا كلاس يدعى NoteBook يحتوي على خاصيتين Private هما _name و _prize. سنقوم بإنشاء Getter يُسمى name و prize للوصول إلى قيم الخصائص. إذا قُدم اسم فارغ، فسيتم إرجاع “بدون اسم” كقيمة الاسم.
class NoteBook { // الخصائص الخاصة String _name; double _prize; // Constructor NoteBook(this._name, _prize); // Getter للوصول إلى الخاصية الخاصة _name String get name { if (_name == "") { return "بدون اسم"; } return _name; } // Getter للوصول إلى الخاصية الخاصة _prize double get prize { return this._prize; } } void main() { // إنشاء كائن من الكلاس NoteBook NoteBook nb = NoteBook("Apple", 1000); print("اسم الكمبيوتر المحمول الأول: ${nb.name}"); print("سعر الكمبيوتر المحمول الأول: ${nb.prize}"); }
نتيجة الكود:
اسم الكمبيوتر المحمول الأول: Apple سعر الكمبيوتر المحمول الأول: 1000.0
المثال 4: استخدام الـ Getter في دارت
فلنفترض أن لدينا كلاس يدعى Person يحتوي على خاصية firstName. سنقوم بإنشاء Getter يُسمى uppercaseName للحصول على قيمة firstName بأحرف كبيرة.
class Person { // الخصائص String? firstName; // Constructor Person(this.firstName); // Getter String get uppercaseName => firstName!.toUpperCase(); } void main() { Person p = Person("John"); print(p.uppercaseName); }
نتيجة الكود:
JOHN
أتمنى أن يكون ذلك واضحًا ومفهومًا! في حالة وجود أي استفسارات، فلا تتردد في طرحها.
في الختام، يمكننا القول أن الـ Getter في لغة برمجة دارت (Dart) يمثل أحد الأدوات الأساسية التي تُسهم في تنظيم وتحسين برمجتنا. من خلال الـ Getter، نمكن أنفسنا من الوصول إلى البيانات بشكل سلس ومنتظم، سواء كانت هذه البيانات عامة أو خاصة Private.
إن استخدام الـ Getter مع الخصائص الخاصة Private يساعد في الحفاظ على الأمان والتحكم في البيانات، كما يمكننا من تطبيق السلوك المخصص عند الوصول إلى هذه البيانات. سواء كنت مبتدئًا في برمجة دارت أو مُطوِّرًا محترفًا، فإن الفهم الجيد لاستخدام الـ Getter سيكون له أثر إيجابي على جودة وكفاءة برمجتك.