ולידציה ותופעות לוואי
חלק מהיחידה תכנות מונחה עצמים במסלול ה-JavaScript של Coddy. שיעור 45 מתוך 56.
פעולות גישה וקביעה יכולות לעשות יותר מאשר רק לקרוא ולכתוב מאפיינים — הן יכולות לאמת קלטים ולהפעיל תופעות לוואי כאשר ערכים משתנים.
בואו ניצור מחלקת 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}`);
}
}כעת, כשאנחנו משתמשים בקובע, האימות מתבצע באופן אוטומטי:
const user = new User('Alice', 25);
// זה עובד
user.age = 30; // נרשם ביומן: "Age updated to 30"
// זה גורם לשגיאה
user.age = -5; // שגיאה: הגיל חייב להיות בין 0 ל-120
// גם זה גורם לשגיאה
user.age = "thirty"; // שגיאה: הגיל חייב להיות מספראימות = בדיקה אם ערך תקין לפני שמירתו
תופעות לוואי = פעולות נוספות שמתרחשות כשמאפיין משתנה
אתגר
נתונה לך מחלקת BankAccount עם setter בסיסי. עליך להשלים את ה-setter של balance.
הוסף ל-setter:
- אימות: בדוק אם
valueאינו מספר או קטן מ-0 — אם כן,console.log("Invalid balance")והשתמש ב-returnכדי לצאת מה-setter - תופעת לוואי: לאחר שמירת ערך תקין,
console.log(\`Balance updated to $${value}\`)
נסו בעצמכם
import { BankAccount } from './account.js';
// מקרי בדיקה
const account = new BankAccount("Savings");
// בדיקה 1: יתרה תקינה
account.balance = 100;
console.log(account.balance);
// בדיקה 2: Invalid balance (שלילי)
account.balance = -50;
console.log(account.balance);
// בדיקה 3: Invalid balance (לא מספר)
account.balance = "abc";
console.log(account.balance);
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1אובייקטים ומילת המפתח this
סקירה מהירה: אובייקטיםהוספת מתודות לאובייקטיםהבנת מילת המפתח thisפונקציות בנאימילת המפתח newאתגר סיכום7הורשה ומילת המפתח extends
הורשההקשר "הוא-סוג-של"מילת המפתח extendsהמתודה super()הורשת מאפיינים ומתודותאתגר סיכום8ארגון קוד OOP
ארגון מחלקות במודוליםתרגלו בעצמכם: קומפיילר JavaScript אונליין