引数
Argument
引数は、関数やメソッドを呼び出す際に渡す値です。定義側で値を受け取る名前を仮引数(parameter)、呼び出し側で実際に渡す値を実引数(argument)と呼び分けます。
🐾 猫で例えると?
指先から差し出されたおやつを食べる茶トラ。「食べる」という共通の処理に、その都度「カリカリを3粒」のように種類と量を渡す、と考えてみましょう。この種類や量に当たる具体的な値が「引数」です。後のコード例でも、同じ関数に違う値を渡して使い分けます。
💻 IT現場における「引数」とは?
開発現場において、関数やメソッドは「特定の処理をまとめた自動販売機」のようなものです。引数は、その自動販売機に投入する硬貨や、選択された商品のボタン情報に該当します。毎回同じ固定の処理を行うだけでなく、外部から異なるデータを「引数」として受け取ることで、1つの関数を何通りにも再利用できるようになります。
実務では、関数を定義する側に記述する変数を「仮引数(Parameter)」、実際に関数を実行してデータを渡す側の具体的な値を「実引数(Argument)」と呼び分けて、厳密に仕様を設計していきます。適切なデータ型の制限や初期値の設定を行うことが、堅牢なアプリケーション開発の基本となります。
⚠️ 引数の仕組みと注意点
引数の渡し方は言語によって異なります。JavaScriptでは値が渡されますが、オブジェクトの場合は同じオブジェクトを指す値を共有します。関数内でプロパティを書き換えると呼び出し元からも見えますが、仮引数へ別のオブジェクトを再代入しても呼び出し元の変数は置き換わりません。
JavaScriptでの実装例
次は、種類と量を受け取って説明文を返すJavaScriptの例です。表示用の架空の処理であり、実際の給餌量を示すものではありません。文字列と個数の条件を満たさない場合は例外で知らせます。
function feedCat(snack, amount = 1) {
if (typeof snack !== "string" || snack.trim() === "") {
throw new TypeError("おやつの名前が必要です");
}
if (!Number.isInteger(amount) || amount < 1) {
throw new RangeError("個数には正の整数が必要です");
}
return `${snack}を${amount}個用意します`;
}
console.log(feedCat("カリカリ", 3));
console.log(feedCat("カリカリ")); // 省略時は1 snackとamountが定義側の仮引数、呼び出し時の「カリカリ」と3が実引数です。デフォルト値と入力検証は役割が違います。JavaScriptではnullを渡してもデフォルト値は適用されないため、許可する値を明示します。
🛠️ 引数を賢く使うためのポイント
引数が増えて使い方が分かりにくくならないよう、次の点を確認します。
- 順番を覚えにくくなったら整理: 引数の個数だけで機械的に決めず、関連する値を名前付きのオブジェクトへまとめると、呼び出しの意図が読み取りやすくなるかを考えます。
- 引数の型とバリデーションを徹底する: 予期せぬデータ型が渡ってきた場合に備え、関数内部の冒頭で型チェックや存在確認を厳格に行います。
- 副作用のない純粋関数を目指す: 引数として受け取った元のオブジェクトを関数内で直接書き換えず、新しいオブジェクトを生成して返すことで、バグの発生を最小限に抑えます。
差し出すおやつが変われば猫の反応も変わるように、引数は処理に渡す具体的な値です。関数を作るときは名前と型だけでなく、省略した場合や範囲外の値を受け取った場合の扱いも決めると、呼び出す側が使い方を理解しやすくなります。