8️⃣
[読書メモ]オブジェクト設計スタイルガイド 1章2節 with TypeScript
初めに
オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
1.2 状態
プロパティ:オブジェクトの状態を格納するもの。名前と型を持つ。
スコープ
- private:クラスのインスタンスのみが使用可能。
- public:あらゆるクライアントがアクセス可能。
- protected:自身のクラスとサブクラスからアクセス可能
詳細
privateスコープをデフォルトにする
クライアントは明治的に定義されたpublicでのみオブジェクトと対話することで無駄な依存を防げる
class GreetWithName {
// プロパティ:オブジェクトの状態を格納するもの。名前と型を持つ。
private name: string; // スコープを限定している
public hello() {
console.log("hello" + this.name);
}
constructor(name: string) {
this.name = name; // 可変にする場合は、引数から受け取るようにできる
}
}
const k = new GreetWithName("K");
k.hello();
ミュータブル:オブジェクトの生存期間中に変更され得る
イミュータブル:インスタンス化後に、一切変更されない
export class Mutable {
constructor(private _count: number) {}
public add() {
this._count++;
}
get count() {
return this._count;
}
}
class Immutable {
constructor(private _count: number) {}
public add(): Immutable {
return new Immutable(this._count + 1);
}
get count() {
return this._count;
}
}
const ob1 = new Mutable(0);
ob1.add();
console.log(ob1.count); // 1
const ob2 = new Immutable(0);
const ob3 = ob2.add();
console.log(ob2.count); // 0
console.log(ob3.count); // 1
Discussion