引数とは?関数に渡す値の仕組みと実引数・仮引数の違い

システム開発・テクノロジー
引数とは?ざっくりと3行で
  • 関数やメソッドを呼び出す際に渡す入力値のこと。関数はこの値を受け取って処理を実行し結果を返す。日本語では「ひきすう」と読む
  • 関数の定義側で受け取る変数を「仮引数(parameter)」・関数を呼び出す側で渡す具体的な値を「実引数(argument)」と区別して呼ぶ
  • JavaScriptなら`function add(a, b)`のaとbが仮引数・`add(3, 5)`の3と5が実引数で、関数を部品化して再利用可能にする基本的な仕組みだ

【深掘り】これだけ知ってればOK!

引数の種類を整理しよう。必須引数:必ず渡さなければエラーになる引数。デフォルト引数:渡さなかった場合に使われるデフォルト値が設定された引数。可変長引数:引数の数を可変にする(Pythonでは`*args`で複数の値をタプルとして受け取る)。キーワード引数:名前付きで渡す引数(`greet(name=’太郎’, greeting=’こんにちは’)`)。

引数と戻り値の関係を理解しよう。関数は引数(入力)を受け取って処理し戻り値(出力)を返す。これは数学の関数`f(x) = x * 2`と同じ考え方で`x`が引数・`f(x)`の結果が戻り値だ。引数と戻り値の型を明示する型注釈(TypeScript・Pythonの型ヒント)を使うことでIDEの補完と型チェックが有効になり開発効率と品質が上がる。

Pythonの可変長引数を実例で理解しよう。`def total(*numbers): return sum(numbers)` と定義すると `total(1,2,3)` でも `total(1,2,3,4,5)` でも動く。`**kwargs`はキーワード引数を辞書として受け取る可変長引数で柔軟な関数インターフェースを実現する。

引数をどこで定義するかでスコープ(変数の有効範囲)が決まる。仮引数は関数のスコープ内でのみ有効で関数の外から直接アクセスできない。グローバル変数と仮引数の名前が同じでも別の変数として扱われる点は初心者が混乱しやすいポイントだ。

関数の引数が多い(5個以上)場合は設計を見直すサインだ。引数が多いと関数の責務が多すぎることが多い。関連する引数を辞書やオブジェクト・データクラスにまとめる・関数を分割するという設計改善を検討することが保守性の高いコードにつながる。

よくある誤解

引数=変数だと思っている

引数は関数に渡す値(実引数)または関数が受け取る変数(仮引数)のことで、通常の変数とは異なる。仮引数は関数のスコープ内でのみ有効で関数の外からアクセスできない。

引数と戻り値は同じだと思っている

引数は関数に渡す入力値で戻り値は関数が処理結果として返す出力値だ。`add(3, 5)`では3と5が引数で関数が計算して返す8が戻り値だ。

会話での使われ方

ITKAGYO運営者デプロイ太郎のアイコン画像

この関数、引数が多すぎて呼び出す時に何番目が何の値か分からなくなります。Pythonならキーワード引数を使って名前付きで渡すようにしましょう。

コードレビューで引数の多い関数の可読性問題を指摘している場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

デフォルト引数を設定しておけば、その引数を渡さなくても関数が動きます。オプションの設定は全部デフォルト引数にしましょう。

エンジニアがデフォルト引数の活用方法を後輩に教えている場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

この`*args`って何ですか?可変長引数というもので引数の数を固定しなくていい書き方です。

コードを読んでいる際に可変長引数の記法について質問されたエンジニアが答えている場面。

【まとめ】3つのポイント

  • 関数を呼び出す際に渡す入力値で関数の処理を変化させる仕組み:仮引数(定義側の変数)と実引数(呼び出し側の値)を分けて理解することで関数の再利用性の仕組みが明確になる
  • デフォルト引数・可変長引数・キーワード引数で柔軟な関数設計が可能:引数の種類を使い分けることで必須の設定と省略可能な設定を分けたり引数の数を可変にしたりといった柔軟な関数インターフェースが設計できる
  • 型注釈で引数と戻り値の型を明示してIDEの補完と型チェックを活用:TypeScriptやPythonの型ヒントで引数・戻り値の型を明示することでIDEの補完機能と静的型チェックが有効になり開発効率と品質が向上する

よくある質問

Q
仮引数と実引数の違いを教えてください。
A

仮引数は関数を定義するときに書く変数(`def add(a, b)`のaとb)です。実引数は関数を呼び出すときに渡す具体的な値(`add(3, 5)`の3と5)です。

Q
Pythonで引数にデフォルト値を設定するにはどうすればいいですか?
A

`def greet(name, greeting=’こんにちは’)`のように引数名=デフォルト値の形で設定します。デフォルト値を持つ引数は必須引数より後ろに書く必要があります。

Q
JavaScriptの引数の数が関数定義より少ない場合はどうなりますか?
A

渡されなかった引数はundefinedになります。デフォルト値を設定することで`function greet(name, greeting=’こんにちは’)`のように省略時の値を指定できます。

Q
*argsと**kwargsはどう違いますか?
A

*argsは複数の引数をタプルとして受け取る可変長位置引数です。**kwargsは複数のキーワード引数を辞書として受け取ります。

【出典】参考URL

https://developer.mozilla.org/ja/docs/Glossary/Argument :MDN「引数(Argument)」の説明
https://docs.python.org/ja/3/glossary.html#term-argument :Python公式「引数」の用語解説

:PEP 484 Python型注釈の仕様

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!
タイトルとURLをコピーしました