← 解説「関数オーバーロード — 複数の呼び出し方を宣言する」に戻る
サンプルコードで身につける: 関数オーバーロード — 複数の呼び出し方を宣言する
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1個数違いの呼び出し方を2つ宣言する
オーバーロードの最小構成です。引数1個と2個、2通りの宣言を上に並べ、両方を受け止められる実装を1つだけ書きます。呼び出す側からは「商品名だけ」「商品名と個数」という2つの形が候補として見える、というのが宣言を分ける効果です。
TypeScript
2引数の位置の意味が呼び出し方で変わる関数
引数1個なら「終了値」、2個なら「開始値と終了値」のように、同じ位置の引数でも個数によって意味が変わる関数があります。オプション引数だけでは「1個目の意味が変わる」ことを表現できないため、宣言を分けて引数名ごと変えられるオーバーロードが活きます。
TypeScript
3呼び出し方ごとに戻り値の型を変える
オーバーロードでは引数だけでなく戻り値の型も宣言ごとに変えられます。個数を指定しなければ先頭の1件(string)、指定すれば配列(string[])が返る、という関係を呼び出す側に正確に見せられます。実装側の戻り値はいったん any でまとめていますが、外から見える型は宣言の方なので安全です。
TypeScript
43つ以上の宣言を並べる
オーバーロードシグネチャは2つまでという決まりはなく、必要なだけ並べられます。外から呼べるのは並べた宣言の形だけで、それ以外の呼び出しはすべてエラーになります。住所のように「詳しさの段階」がある組み立て処理を1つの関数にまとめる例です。
TypeScript
5通知の宛先を指定できる送信関数
実務のユーティリティ関数では「普段は既定の宛先、必要なときだけ宛先リストを指定」という呼び分けがよくあります。オプション引数1つでも動きますが、宣言を2つに分けることで「宛先を指定する呼び出し方がある」ことが関数の定義から読み取れるようになります。
TypeScript