Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التحقق من الصحة والآثار الجانبية

جزء من قسم 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

التحقق من الصحة = التحقق مما إذا كانت القيمة صالحة قبل تخزينها
الآثار الجانبية = إجراءات إضافية تحدث عند تغيير خاصية ما

challenge icon

التحدي

لقد تم تزويدك بفئة BankAccount مع مُعيّن (setter) أساسي. مهمتك هي إكمال مُعيّن الـ balance.

أضف إلى المُعيّن ما يلي:

  1. التحقق من الصحة: تحقق مما إذا كانت الـ value ليست رقماً أو كانت أقل من 0 - إذا كان الأمر كذلك، قم بتنفيذ console.log("Invalid balance") واستخدم return للخروج من المُعيّن
  2. تأثير جانبي: بعد تخزين قيمة صالحة، قم بتنفيذ 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);

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming