TypeScript - アクセッサ

こんにちは、志を抱くプログラマーさんたち!今日は、TypeScriptのアクセッサの魅力的な世界に潜り込んでみましょう。プログラミングが初めてであっても心配しないでください。私はこのトピックをステップバイステップでガイドします。これまでに多くの学生たちに教えてきたように。お気に入りの飲み物を一杯取り、始めましょう!

TypeScript - Accessors

アクセッサとは?

TypeScriptのアクセッサ的具体的な詳細に進む前に、アクセッサとは一般的に何かを理解しましょう。宝箱(これが私たちのオブジェクト)を持っていて、中の宝(オブジェクトのプロパティ)とのやり取りをコントロールしたいとします。アクセッサは、これらの宝を制御された方法で取得または設定する魔法の鍵のようなものです。

TypeScriptには、以下の2つの类型的なアクセッサがあります:

  1. ゲッター:プロパティの値を取得するのを助けます。
  2. セッター:プロパティの値を設定するのを許可します。

これらのそれぞれを詳しく見ていきましょう。

TypeScriptでのゲッター

ゲッターとは?

ゲッターは、オブジェクトのプロパティにアクセスするための特別なメソッドです。個人のアシスタントが情報を取り寄せるようなものです。

ゲッターの定義方法

簡単な例を見てみましょう:

class Person {
private _name: string;

constructor(name: string) {
this._name = name;
}

get name(): string {
console.log("名前を取得中");
return this._name;
}
}

let person = new Person("Alice");
console.log(person.name); // 出力: 名前を取得中\n Alice

この例では:

  • Personクラスにプライベートプロパティ _nameがあります。
  • getキーワードを使用してゲッター nameを定義します。
  • person.nameにアクセスすると、ゲッター メソッドが呼び出されます。

ゲッターの使用理由

  1. 計算されたプロパティ:ゲッターは計算された値を返すことができます。
class Circle {
private _radius: number;

constructor(radius: number) {
this._radius = radius;
}

get area(): number {
return Math.PI * this._radius ** 2;
}
}

let circle = new Circle(5);
console.log(circle.area); // 出力: 78.53981633974483
  1. 遅延読み取り:ゲッターはデータを必要なときにだけ読み取ることでパフォーマンスを向上させます。
class DataFetcher {
private _data: string | null = null;

get data(): string {
if (this._data === null) {
console.log("データを取得中...");
this._data = "高価なデータ";
}
return this._data;
}
}

let fetcher = new DataFetcher();
console.log(fetcher.data); // 出力: データを取得中...\n 高価なデータ
console.log(fetcher.data); // 出力: 高価なデータ (この時は取得しない)

TypeScriptでのセッター

セッターとは?

セッターはゲッターの対応物です。プロパティの値を設定するメソッドで、追加のロジックを含むことがよくあります。

セッターの定義方法

基本的な例を見てみましょう:

class Temperature {
private _celsius: number = 0;

set celsius(value: number) {
if (value < -273.15) {
throw new Error("絶対零点以下の温度は存在しません");
}
this._celsius = value;
}

get celsius(): number {
return this._celsius;
}
}

let temp = new Temperature();
temp.celsius = 25; // これはセッターを呼び出します
console.log(temp.celsius); // 出力: 25

// temp.celsius = -300; // これはエラーをスローします

この例では:

  • Temperatureクラスにプライベート _celsiusプロパティがあります。
  • celsiusに対するセッターを定義します。
  • セッターは値が有効であるかをチェックします。

セッターの使用理由

  1. データの検証:セッターはプロパティに割り当てられる値が有効であることを確認します。

  2. 副作用:セッターはプロパティが変更されたときに他のアクションをトリガーすることができます。

class User {
private _name: string = "";
private _lastUpdated: Date = new Date();

set name(value: string) {
this._name = value;
this._lastUpdated = new Date();
}

get name(): string {
return this._name;
}

get lastUpdated(): Date {
return this._lastUpdated;
}
}

let user = new User();
user.name = "Bob";
console.log(user.name); // 出力: Bob
console.log(user.lastUpdated); // 出力: 現在の日時

アクセッサメソッドの表

ここまでで説明したアクセッサメソッドのまとめです:

アクセッサの種類 キーワード 目的
ゲッター get プロパティ値の取得 get name(): string { return this._name; }
セッター set プロパティ値の設定 set name(value: string) { this._name = value; }

結論

TypeScriptのアクセッサは、オブジェクトのプロパティのアクセスと修正をコントロールする強力な方法を提供します。它们 allow you to add logic, validation, and computed properties to your classes, making your code more robust and maintainable.

记住,像学习任何新技能一样,掌握访问器需要练习。如果一开始不能立即掌握,不要气馁 - 继续编码,继续尝试,很快你就能像专业人士一样使用获取器和设置器!

就像我总是告诉我的学生一样,编程就像学习一门新语言。一开始可能看起来令人困惑,但只要有耐心和练习,你很快就会流利地“说”TypeScript。快乐编码,别忘了在这个过程中享受乐趣!

Credits: Image by storyset