データの保護と整形 | getterとsetter | JavaScript 超完全入門 基本から発展までのすべて

スポンサーリンク
スポンサーリンク

データの保護とは?

JavaScriptのオブジェクトでは、データの保護を行うためにgettersetterを使うことができます。データの保護とは、オブジェクトのプロパティに対する不正なアクセスや変更を防ぎ、適切な値だけがプロパティに設定されるように制御することです。

データ保護のためのsetterの利用

setterを使うことで、プロパティに設定される値を検証し、無効な値が設定されないようにできます。例えば、年齢のプロパティが負の数にならないように制限することが可能です。

データ保護の例

const user = {
    _age: 25,
    get age() {
        return this._age;
    },
    set age(value) {
        if (value > 0 && value < 120) {
            this._age = value;
        } else {
            console.log("無効な年齢です");
        }
    }
};

console.log(user.age);  // 25
user.age = -10;         // "無効な年齢です"
console.log(user.age);  // 25

この例では、年齢が適切な範囲(0歳以上、120歳未満)の場合にのみ、ageプロパティが更新されます。それ以外の場合には「無効な年齢です」というメッセージが表示されます。

データの整形とは?

データの整形は、ユーザーが入力したりオブジェクトに設定されるデータを、一定の形式に揃えることを指します。例えば、名前のプロパティが常に大文字で始まるように整形したり、数値を指定の単位で表示することが考えられます。

データ整形のためのgetterの利用

getterを使うことで、プロパティの値を取得する際に、データを指定の形式に整形して返すことができます。これは、内部では保持している値に対して表示形式をカスタマイズする際に便利です。

データ整形の例

const person = {
    _name: "taro yamada",
    get name() {
        return this._name.replace(/\b\w/g, (char) => char.toUpperCase());
    },
    set name(value) {
        this._name = value.toLowerCase();
    }
};

console.log(person.name);  // "Taro Yamada"
person.name = "HANAKO SUZUKI";
console.log(person.name);  // "Hanako Suzuki"

この例では、nameプロパティが常に先頭が大文字になるように整形されています。setterは名前を小文字に変換して保存し、getterはそれを整形して返しています。

データ保護と整形の組み合わせ

データの保護と整形は、gettersetterを組み合わせることで強力に機能します。これにより、外部からのプロパティへのアクセスが適切に制限され、かつ表示形式や保存形式を統一することができます。

データ保護と整形を組み合わせた例

const account = {
    _balance: 1000,
    get balance() {
        return this._balance.toLocaleString() + " 円";
    },
    set balance(amount) {
        if (amount >= 0) {
            this._balance = amount;
        } else {
            console.log("無効な金額です");
        }
    }
};

console.log(account.balance);  // "1,000 円"
account.balance = -500;        // "無効な金額です"
console.log(account.balance);  // "1,000 円"
account.balance = 2000;
console.log(account.balance);  // "2,000 円"

この例では、balanceプロパティに対する値の設定を保護しつつ、表示時にはtoLocaleString()を使って整形しています。これにより、金額が常に整形された形式で表示される一方、無効な金額の設定は防止されます。

データ保護と整形の利点

データ保護 データ整形
無効な値の設定を防ぐ 値を一定の形式に揃える
プロパティの変更時に検証を行う 表示や取得時にデータを整形
データの信頼性を高める データの可読性を向上させる

まとめ

gettersetterを使ったデータの保護と整形により、JavaScriptのオブジェクトはより安全で柔軟に管理することができます。プロパティの値の設定時に検証を行い、表示時には整形することで、データの信頼性や可読性を高めることが可能です。これにより、オブジェクト指向プログラミングにおけるデータ管理の一貫性が強化されます。