可変長引数【variable arguments】可変引数/可変個引数
可変長引数とは?

通常、関数やメソッドを定義する際には、受け取る引数の個数と順序をあらかじめ決め、各引数に対応する仮引数名やデータ型を一つずつ列挙する。呼び出し側はこの定義に一致する数の実引数を渡す必要があり、定義と異なる個数で呼び出すとエラーになるか、意図しない動作の原因となる。
これに対し、可変長引数に対応した言語では定義側が特殊な記法を用いて「任意の数の引数を受け取る」ことを宣言できる。呼び出し側は1個でも10個でも必要なだけ値を渡せるようになり、受け取った値は関数内部で配列やリストのような連続したデータ構造として一括して扱われる。引数の型については単一の型に限定される言語もあれば、異なる型を混在させられる言語もある。
具体的な記法はプログラミング言語ごとに異なる。Pythonでは仮引数名の前にアスタリスクを付けて宣言し、渡された値はタプルとして扱われる。Javaでは三点リーダー(...)を用いた記法が導入されており、内部的には配列として処理される。JavaScriptも三点リーダーを使い、「残余引数」と呼ばれる仕組みで処理される。
古くはC言語で標準ライブラリの仕組みを利用して可変個の引数を処理することができたが、引数の個数管理を呼び出し側のコードを記述する開発者が担う必要があり、誤った扱いが不具合の原因になりやすかった。こうした経緯から、現代の主要な言語の多くは安全かつ簡潔に記述できる専用の構文を標準で備えている。
可変長引数は、複数の数値を合計する処理や文字列の連結、ログ出力のように対象の個数が事前に確定しない処理で多用される。各引数にそれぞれ異なる意味を持たせ、渡す個数によって関数の動作を変化させる設計に用いられることもある。この場合、必須となる通常の引数の後ろに可変長引数を組み合わせ、後半の引数を省略可能にする設計がよく見られる。デフォルト値の仕組みと併用することで呼び出し側の柔軟性を高めている。