في لغة دارت (Dart) يتم استخدام Getter و Setter لتوفير وصول قراءة وكتابة صريح لخصائص الكائنات. تستخدم الكلمات المحجوزة get و set لإنشاء Getter و Setter على التوالي. يقوم الـ Getter بقراءة قيمة الخاصية ويعمل كمنتقي، بينما يقوم الـ Setter بتحديث قيمة الخاصية ويعمل كمتعدي.
استخدام Getter و Setter في دارت:
- التحقق من صحة البيانات قبل القراءة أو الكتابة.
- قيود الوصول للقراءة والكتابة للخصائص.
- جعل الخصائص للقراءة فقط أو الكتابة فقط.
- تنفيذ بعض الإجراءات قبل القراءة أو الكتابة على الخصائص.
أمثلة على الـ Getter و Setter في دارت:
مثال 1: استخدام الـ Getter و Setter في دارت
في هذا المثال، سننشئ كلاس يسمى Student يحتوي على ثلاث خصائص Private هي _firstName و _lastName و _age. يوجد اثنان من الـ Getters وهما fullName و age للحصول على قيمة الخصائص. يوجد أيضًا ثلاثة Setters وهما firstName و lastName و age لتحديث قيمة الخصائص. إذا كانت قيمة العمر أقل من 0، فسيتم ظهور خطأ.
class Student { // الخصائص الخاصة String? _firstName; String? _lastName; int? _age; // Getter للحصول على الاسم الكامل String get fullName => "${_firstName!} ${_lastName!}"; // Getter لقراءة الخصائص الخاصة _age int get age => _age!; // Setter لتحديث الخصائص الخاصة _firstName set firstName(String firstName) => _firstName = firstName; // Setter لتحديث الخصائص الخاصة _lastName set lastName(String lastName) => _lastName = lastName; // Setter لتحديث الخصائص الخاصة _age set age(int age) { if (age < 0) { throw Exception("لا يمكن أن يكون العمر أقل من 0"); } _age = age; } } void main() { // إنشاء كائن من الكلاس Student Student st = Student(); // تعيين القيم للكائن باستخدام الـ Setter st.firstName = "John"; st.lastName = "Doe"; st.age = 20; // عرض قيم الكائن print("الاسم الكامل: ${st.fullName}"); print("العمر: ${st.age}"); }
نتيجة الكود:
الاسم الكامل: John Doe العمر: 20
مثال 2: استخدام الـ Getter و Setter في دارت
في هذا المثال، سننشئ كلاس يسمى BankAccount يحتوي على خاصية Private واحدة هي _balance. يوجد Getter واحد هو balance لقراءة قيمة الخاصية. يوجد أيضًا دوال deposit و withdraw لتحديث قيمة الـ _balance.
class BankAccount { // الخاصية الخاصة double _balance = 0.0; // Getter لقراءة الخاصية الخاصة _balance double get balance => _balance; // دالة لإيداع المال void deposit(double amount) { _balance += amount; } // دالة لسحب المال void withdraw(double amount) { if (_balance >= amount) { _balance -= amount; } else { throw Exception("رصيد غير كافٍ"); } } } void main() { // إنشاء كائن من الكلاس BankAccount BankAccount account = BankAccount(); // إيداع المال account.deposit(1000); // عرض الرصيد print("الرصيد بعد الإيداع: ${account.balance}"); // سحب المال account.withdraw(500); // عرض الرصيد print("الرصيد بعد السحب: ${account.balance}"); }
نتيجة الكود:
الرصيد بعد الإيداع: 1000 الرصيد بعد السحب: 500
متى يجب استخدام Getter و Setter في دارت:
- استخدم Getter و Setter عندما ترغب في تقييد الوصول إلى الخصائص.
- استخدم Getter و Setter عندما ترغب في تنفيذ بعض الإجراءات قبل قراءة أو كتابة الخصائص.
- استخدم Getter و Setter عندما ترغب في التحقق من صحة البيانات قبل قراءة أو كتابة الخصائص.
- لا تستخدم Getter و Setter عندما ترغب في جعل الخصائص للقراءة فقط أو الكتابة فقط.
قمنا باستعراض أهمية استخدام مفهومي Getter و Setter في لغة دارت (Dart)، وكيف يمكن من خلالهما توفير وصولًا صريحًا وسهلاً لخصائص الكائنات في برمجتك. تلعب هذه الأدوات دورًا حاسمًا في تحقيق الكفاءة والمرونة في تطبيقاتك.
باستخدام Getter، يمكنك قراءة قيم الخصائص بسهولة ودقة، بينما يمكن لـ Setter تحديث تلك القيم بسهولة أيضًا. هذا يسهم في تنظيم وتبسيط الكود ويزيد من قوته.
إذا كنت مبرمجًا يستخدم لغة دارت أو تريد تعلمها، فإن الفهم الجيد لهذين المفهومين سيمكنك من بناء تطبيقات أكثر كفاءة واحترافية. استفد من إمكانيات Getter و Setter لتحسين تجربة مستخدمي تطبيقاتك وتطوير أكوادك بشكل أفضل.