SEの部屋

クラスについて

クラスについて

TypeScriptのクラスは、オブジェクト指向プログラミングで使用される概念の一つで、オブジェクトを作成するための設計図のようなものです。
クラスにはプロパティやメソッドを定義することができ、これらを使ってオブジェクトを生成することができます。また、継承を使用して、あるクラスから別のクラスを作成することもできます。
TypeScriptのクラスは、JavaScriptのクラスに基づいていますが、型付きの言語なので、プロパティやメソッドに型を指定することができます。これにより、開発者はより堅牢で保守性の高いコードを書くことができます。

クラスの機能について

TypeScriptのクラスでは、プロパティとメソッドを定義することができます。以下に、それぞれの概要を説明します。

コンストラクタ

TypeScriptのコンストラクタは、クラスがインスタンス化されたときに自動的に呼び出されるメソッドです。コンストラクタは、クラスのプロパティを初期化するために使用されます。
コンストラクタは、次のように定義します。

class MyClass {
  constructor(parameter1: Type, parameter2: Type) {
    // プロパティの初期化などの処理を行う
  }
}

コンストラクタは、クラスのインスタンスが作成されたときに自動的に呼び出されます。コンストラクタは、引数を取ることができ、これらの引数を使ってプロパティを初期化することができます。

例えば、以下のようなクラスがあるとします。

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

このクラスでは、コンストラクタで`name`と`age`の2つのプロパティを初期化しています。コンストラクタは、次のように使うことができます。

const person1 = new Person("Alice", 30);
const person2 = new Person("Bob", 25);

console.log(person1.name); // "Alice"
console.log(person1.age); // 30

console.log(person2.name); // "Bob"
console.log(person2.age); // 25

このように、コンストラクタを使って、クラスのインスタンスを作成するときに必要なプロパティを初期化することができます。


アクセス修飾子について

TypeScriptでは、クラスのプロパティやメソッドにアクセス修飾子を指定することができます。アクセス修飾子は、プロパティやメソッドがどのようにアクセスできるかを制御するために使用されます。

public

デフォルトの修飾子で、どこからでもアクセス可能です。明示的に修飾子を指定しない場合は、自動的にpublicになります。

private

同じクラス内からのみアクセス可能です。継承先のサブクラスからもアクセスできません。

protected

同じクラス内と、そのクラスを継承したサブクラスからのみアクセス可能です。クラス外からのアクセスはできません。

アクセス修飾子を使うことで、プログラマーはクラス内のプロパティやメソッドを適切に制限し、外部からの不正なアクセスを防ぐことができます。また、継承によるクラスの拡張時にも、適切なアクセス修飾子を指定することで、クラスの機能拡張をより柔軟かつ安全に行うことができます。

プロパティについて

TypeScriptのプロパティは、クラスの中に定義された変数のことを指します。プロパティは、クラス内のメソッドからアクセスすることができます。
プロパティには、以下のような種類があります。

インスタンスプロパティ

インスタンスプロパティは、クラスのインスタンスごとに異なる値を持つプロパティです。インスタンスプロパティは、コンストラクター内でthisキーワードを使って定義します。

class MyClass {
  myProperty: string;

  constructor(myProperty: string) {
    this.myProperty = myProperty;
  }
}

静的プロパティ

静的プロパティは、クラスに固有のプロパティであり、すべてのインスタンスで共有されるプロパティです。静的プロパティは、staticキーワードを使って定義します。

class MyClass {
  static myStaticProperty: string = "Hello, world!";
}

読み取り専用プロパティ

読み取り専用プロパティは、値が設定された後に変更できないプロパティです。読み取り専用プロパティは、readonlyキーワードを使って定義します。

class MyClass {
  readonly myReadOnlyProperty: string = "Hello, world!";
}

プロパティの初期化

プロパティに初期値を設定することもできます。初期値を設定するには、プロパティ宣言時に値を代入します。

class MyClass {
  myProperty: string = "Hello, world!";
}


メソッドについて

クラスのメソッドは、クラス内で定義された関数で、クラスのオブジェクトから呼び出すことができます。メソッドは、オブジェクトの内部の状態を変更するために使用されることが多く、外部からのアクセス制限が必要な場合はアクセス修飾子を用いて制限することができます。
以下は、クラス内にメソッドを定義する例です。

class MyClass {
  private myValue: number;

  constructor(value: number) {
    this.myValue = value;
  }

  public getValue(): number {
    return this.myValue;
  }

  public setValue(value: number): void {
    this.myValue = value;
  }
}

上記の例では、MyClassというクラスが定義されています。クラス内には、myValueというプライベートな数値型のプロパティがあり、コンストラクタで初期化されています。また、getValuesetValueというパブリックなメソッドがあります。

getValueメソッドは、myValueプロパティの値を返すだけの簡単なメソッドです。setValueメソッドは、myValueプロパティの値を変更するために使用されます。どちらのメソッドも、public修飾子が付けられているため、クラス外からでも呼び出すことができます。
クラスのメソッドは、関数と同じように引数を取ることができます。また、メソッドの戻り値の型を明示することができます。これにより、TypeScriptはコンパイル時に型チェックを行い、エラーを事前に検知することができます。さらに、クラスのメソッドは、オーバーロードすることができます。オーバーロードは、同じ名前のメソッドを定義し、引数の型や個数が異なる場合に、TypeScriptが自動的に適切なメソッドを呼び出す機能です。

ゲッター(get)について

TypeScriptでは、クラスのプロパティに対してゲッターを定義することができます。ゲッターは、プロパティの値を取得するための特別な関数であり、プロパティにアクセスするためのシンタックスを提供します。
以下は、クラスにゲッターを定義する例です。

class MyClass {
  private _myValue: number;

  constructor(value: number) {
    this._myValue = value;
  }

  get myValue(): number {
    return this._myValue;
  }
}

上記の例では、MyClassというクラスが定義されています。クラス内には、_myValueというプライベートな数値型のプロパティがあります。このプロパティには、myValueというゲッターが定義されています。プロパティ名とゲッターの名前は同じである必要があります。
ゲッターは、getキーワードを使って定義されます。ゲッターは戻り値を返すだけのメソッドであり、プロパティの値を取得するために使用されます。ゲッターが呼び出されると、関数本体の処理が実行され、その結果がプロパティの値として返されます。
以下は、ゲッターを使ったプロパティの値の取得方法の例です。

const obj = new MyClass(123);
console.log(obj.myValue); // 出力結果: 123

上記の例では、MyClassのインスタンスを作成し、myValueプロパティにアクセスしています。プロパティにアクセスすると、関連するゲッターが呼び出され、プロパティの値が返されます。
ゲッターを使うことで、プロパティにアクセスするためのインターフェースを提供することができます。また、プロパティの値にアクセスする前に何らかのチェックを行うこともできます。さらに、ゲッターを使って、プロパティの値を動的に計算することもできます。

セッター(set)について

TypeScriptにおけるセッターは、クラス内で特定のプロパティに値を設定するために使用されるメソッドです。セッターは、プロパティにアクセスするために使用されるゲッターと一緒に使用されることが一般的です。
セッターは、プロパティに対して値を設定するための特殊なメソッドです。以下は、セッターを使用してクラスのプロパティに値を設定する例です。

class MyClass {
  private _myProperty: string;

  get myProperty(): string {
    return this._myProperty;
  }

  set myProperty(value: string) {
    this._myProperty = value;
  }
}

const myInstance = new MyClass();
myInstance.myProperty = "Hello, world!";
console.log(myInstance.myProperty); // "Hello, world!"

この例では、MyClassというクラスが定義され、_myPropertyという名前のプライベートなプロパティが定義されています。getsetキーワードを使用して、それぞれmyPropertyという名前のゲッターとセッターが定義されています。
setキーワードに続くmyPropertyの引数は、プロパティに設定される値の型を指定します。セッターの実装では、this._myPropertyに値が代入されます。
クラスのインスタンスを作成すると、セッターを使用してプロパティに値を設定することができます。上記の例では、myInstancemyPropertyプロパティに文字列"Hello, world!"を設定しています。最後に、console.logでプロパティの値が"Hello, world!"であることを確認しています。