واحدة من المفاهيم الأساسية في برمجة Dart هي مفهوم الـ Setter، الذي يمثل جزءًا هامًا في إدارة وتحكم البيانات والخصائص في الكائنات. يهدف هذا المقال إلى شرح مفهوم الـ Setter في لغة Dart، وكيفية استخدامه لتعيين قيم لخصائص الكائنات بشكل دقيق ومرن. سنتناول أمثلة عملية لفهم كيفية تطبيق الـ Setter والاستفادة منه في برمجتك.
الصيغة العامة للـ Setter في دارت
تُستخدم Setter لتعيين قيمة خاصية ما. يتم استخدامها في الغالب لتحديث قيمة خاصية خاصة Private. يوفر Setter وصولًا صريحًا إلى خصائص الكائن.
Syntax:
set property_name (value) { // Setter body }
ملاحظة: بدلاً من كتابة {} بعد اسم الخاصية، يمكنك أيضًا كتابة => (سهم متين) بعد اسم الخاصية.
أمثلة على الـ Setter في دارت:
المثال 1: استخدام الـ Getter في دارت
في هذا المثال أدناه، هناك كلاس يحمل اسم “NoteBook”. يحتوي الكلاس على خاصيتين Private هما _name و _prize. يوجد Setter ان اثنين هما name و prize لتحديث قيمة الخصائص. هناك أيضًا دالة display لعرض قيم الخصائص.
class NoteBook { // الخصائص الخاصة String? _name; double? _prize; // Setter لتحديث الخاصية الخاصة _name set name(String name) => _name = name; // Setter لتحديث الخاصية الخاصة _prize set prize(double prize) => _prize = prize; // دالة لعرض قيم الخصائص void display() { print("Name: $_name"); print("Price: $_prize"); } } void main() { // إنشاء كائن من الكلاس NoteBook NoteBook nb = NoteBook(); // تعيين القيم للكائن باستخدام Setter nb.name = "Dell"; nb.prize = 500.00; // عرض قيم الكائن nb.display(); }
نتيجة الكود:
Name: Dell Price: 500.0
المثال 2: استخدام الـ Setter في التحقق من البيانات
في هذا المثال، هناك كلاس يحمل اسم “NoteBook”. يحتوي الكلاس على خاصيتين Private هما _name و _prize. إذا كانت قيمة _prize أقل من 0، فسنقوم بإلقاء استثناء. هناك أيضًا 2 Setter هما name و prize لتحديث قيمة الخصائص. الكلاس يحتوي أيضًا على دالة display لعرض قيم الخصائص.
class NoteBook { // الخصائص الخاصة String? _name; double? _prize; // Setter لتحديث قيمة خاصية الاسم set name(String name) => _name = name; // Setter لتحديث قيمة خاصية الجائزة set prize(double prize) { if (prize < 0) { throw Exception("السعر لا يمكن أن يكون أقل من 0"); } _prize = prize; } // دالة لعرض قيم الخصائص void display() { print("Name: $_name"); print("Price: $_prize"); } } void main() { // إنشاء كائن من الكلاس NoteBook NoteBook nb = NoteBook(); // تعيين القيم للكائن باستخدام Setter nb.name = "Dell"; nb.prize = 250; // عرض قيم الكائن nb.display(); }
نتيجة الكود:
Name: Dell Price: 250.0
الملاحظة: عادةً ما يكون من الأفضل عدم السماح للمستخدم بتعيين قيمة حقل مباشرة. بدلاً من ذلك، يجب توفير دالة Setter يمكنها التحقق من صحة القيمة قبل تعيينها. هذا أمر مهم جدًا عند العمل على برامج كبيرة ومعقدة.
المثال 3: استخدام الـ Setter في لغة Dart
في هذا المثال، هناك كلاس يحمل اسم “Student”. يحتوي الكلاس على خاصيتين Private هما _name و _classnumber. سنقوم أيضًا بإنشاء 2 Setter هما name و classnumber لتحديث قيمة الخصائص. سيقوم Setter classnumber بقبول قيمة فقط بين 1 و 12. يحتوي الكلاس أيضًا على دالة display لعرض قيم الخصائص.
class Student { // الخصائص الخاصة String? _name; int? _classnumber; // Setter لتحديث قيمة خاصية الاسم set name(String name) => _name = name; // Setter لتحديث قيمة خاصية رقم الصف set classnumber(int classnumber) { if (classnumber <= 0 || classnumber > 12) { throw ('يجب أن يكون رقم الصف بين 1 و 12'); } _classnumber = classnumber; } // دالة لعرض قيم الخصائص void display() { print("Name: $_name"); print("Class Number: $_classnumber"); } } void main() { // إنشاء كائن من الكلاس Student Student s = Student(); // تعيين القيم للكائن باستخدام Setter s.name = "John Doe"; s.classnumber = 12; // عرض قيم الكائن s.display(); // هذا سيولد خطأ //s.setClassNumber(13); }
نتيجة الكود:
Name: John Doe Class Number: 12
في الختام، نستنتج أن مفهوم الـ Setter في لغة Dart يُعد أحد الأدوات الأساسية لإدارة وتحكم البيانات في التطبيقات المبنية بواسطة هذه اللغة. يمكن للـ Setter أن يسهم في تنظيم الكود وجعله أكثر قوة ومرونة.
إذا كنت مُطوِّرًا يستخدم لغة Dart أو تخطط لتعلمها، فإن الفهم الجيد للـ Setter سيكون له أثر إيجابي على كفاءتك في بناء تطبيقات قوية وسليمة. تذكر دائمًا أهمية استخدام هذه الأداة لتحقيق التحكم الكامل في البيانات وتحسين تجربة المستخدم في تطبيقاتك.