التحقق من الصحة والآثار الجانبية
جزء من قسم Object Oriented Programming في رحلة JavaScript على Coddy — الدرس 45 من 56.
يمكن لـ Getters و setters القيام بأكثر من مجرد قراءة وكتابة الخصائص - حيث يمكنها التحقق من صحة المدخلات وتحفيز آثار جانبية عند تغير القيم.
لنقم بإنشاء فئة User مع التحقق من الصحة:
class User {
constructor(name, age) {
this._name = name;
this._age = age;
}
get age() {
return this._age;
}
set age(value) {
// التحقق من أن العمر رقم وضمن نطاق معقول
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
// تأثير جانبي: تسجيل التغيير عند تحديث العمر
console.log(`Age updated to ${value}`);
}
}الآن، عند استخدام الـ setter، تتم عملية التحقق من الصحة تلقائياً:
const user = new User('Alice', 25);
// هذا يعمل
user.age = 30; // سجلات: "Age updated to 30"
// هذا يطرح خطأً
user.age = -5; // خطأ: Age must be between 0 and 120
// هذا يطرح خطأً أيضاً
user.age = "thirty"; // خطأ: Age must be a numberالتحقق من الصحة = التحقق مما إذا كانت القيمة صالحة قبل تخزينها
الآثار الجانبية = إجراءات إضافية تحدث عند تغيير خاصية ما
التحدي
لقد تم تزويدك بفئة BankAccount مع مُعيّن (setter) أساسي. مهمتك هي إكمال مُعيّن الـ balance.
أضف إلى المُعيّن ما يلي:
- التحقق من الصحة: تحقق مما إذا كانت الـ
valueليست رقماً أو كانت أقل من 0 - إذا كان الأمر كذلك، قم بتنفيذconsole.log("Invalid balance")واستخدمreturnللخروج من المُعيّن - تأثير جانبي: بعد تخزين قيمة صالحة، قم بتنفيذ
console.log(\`Balance updated to ${value}\`)
ورقة مرجعية
يمكن للمستقبلات (Getters) والمعدلات (Setters) التحقق من صحة المدخلات وإحداث آثار جانبية عند تغير القيم.
يتحقق **التحقق من الصحة (Validation)** مما إذا كانت القيمة صالحة قبل تخزينها:
set age(value) {
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
}**الآثار الجانبية (Side Effects)** هي إجراءات إضافية تحدث عند تغير الخاصية:
set age(value) {
// التحقق من الصحة...
this._age = value;
// أثر جانبي: تسجيل عند تغير العمر
console.log(`Age updated to ${value}`);
}مثال على الاستخدام:
const user = new User('Alice', 25);
user.age = 30; // يسجل: "Age updated to 30"
user.age = -5; // خطأ: Age must be between 0 and 120جرّب بنفسك
import { BankAccount } from './account.js';
// حالات الاختبار
const account = new BankAccount("Savings");
// الاختبار 1: رصيد صالح
account.balance = 100;
console.log(account.balance);
// الاختبار 2: رصيد غير صالح (سالب)
account.balance = -50;
console.log(account.balance);
// الاختبار 3: رصيد غير صالح (ليس رقماً)
account.balance = "abc";
console.log(account.balance);
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circle9الخصائص والدوال الثابتة (Static)
مستوى الكلاس مقابل مستوى الكائنالخصائص الثابتة (Static Properties)دوال المساعدة الثابتة (Static Utility Methods)تحدي المراجعة12Getters و Setters
الكلمات المفتاحية get و setالخصائص المحسوبةالتحقق من الصحة والآثار الجانبيةتحدي المراجعة