Dev Study
← 解説「static — インスタンスを作らず使うメンバー」に戻る

サンプルコードで身につける: static — インスタンスを作らず使うメンバー

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1static メソッドの最小形

static メソッドはインスタンスを作らず、クラス名から直接呼び出します。引数だけで結果が決まる変換・計算のような処理は、インスタンスを作る意味がないので static にまとめます。Math.max などの組み込みメソッドと同じ作りです。

TypeScript

2static プロパティ — クラスに1つだけの値

static プロパティは「クラス全体で1つだけ」存在する値です。再試行回数のような設定値の置き場所に向いていて、書き換えるとそのクラスを使うすべての場所に効きます。static メソッドからは「クラス名.プロパティ名」で参照します。

TypeScript

3static とインスタンスメンバーの対比

visitorName はインスタンスごとに別の値を持ち、totalCount はクラスに1つだけで全インスタンスから共有されます。コンストラクタの中で static プロパティを増やすと、「このクラスが何個作られたか」をクラス自身が数えられます。両者の所属の違いを確かめてください。

TypeScript

4static ファクトリメソッド — new の入り口を用意する

static メソッドの中で new して返す形をファクトリメソッドと呼びます。Temperature.fromText のように「何から作るのか」を名前で表せるのが利点で、Array.from など組み込みにも同じ形があります。入力の変換をコンストラクタの外に出せるので、作り方が複数あるクラスで重宝します。

TypeScript

5シングルトン的なカウンタ

private constructor と static を組み合わせると、インスタンスを全体で1つに保つシングルトン風の作りになります。どこから shared() を呼んでも同じ実体が返るため、カウンタの値が積み上がっていきます。アプリ全体で共有する設定やキャッシュの管理に使われる形です。

TypeScript