バリデーションと副作用
CoddyのJavaScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 45/56。
ゲッターとセッターは、プロパティの読み取りや書き込みだけでなく、入力値を検証したり、値が変わったときに副作用を引き起こしたりできます。
検証機能を備えた User クラスを作成しましょう。
class User {
constructor(name, age) {
this._name = name;
this._age = age;
}
get age() {
return this._age;
}
set age(value) {
// ageが数値であり、妥当な範囲内にあることを検証する
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;
// 副作用: ageが変更されたときにログを出力する
console.log(`Age updated to ${value}`);
}
}これでセッターを使うと、検証が自動的に行われます。
const user = new User('Alice', 25);
// これは正常に動作します
user.age = 30; // ログに出力: "Age updated to 30"
// これはエラーを発生させます
user.age = -5; // エラー: Ageは0から120までの範囲でなければなりません
// これもエラーを発生させます
user.age = "thirty"; // エラー: Ageは数値でなければなりません検証 = 値を保存する前に、その値が有効かどうかを確認すること
副作用 = プロパティが変更されたときに発生する追加の処理
チャレンジ
基本的なセッターを持つ BankAccount クラスが与えられています。あなたの課題は、balance セッターを完成させることです。
セッターに以下を追加します。
- 検証:
valueが数値ではない、または 0 未満かどうかを確認します。そうであれば、console.log("Invalid balance")を実行し、returnを使ってセッターを終了します。 - 副作用: 有効な値を保存した後、
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);
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: JavaScriptオンラインコンパイラ