引数と戻り値の違いとは?初心者向けに役割と使い方を実務目線で解説
結論として、引数は処理へ渡す値、戻り値は処理の結果として受け取る値です。
簡単に言えば、引数は「入力」、戻り値は「出力」にあたります。メソッドや関数を正しく使うには、この2つの違いを理解することが重要です。
引数とは
引数(Argument)の概要
引数とは、メソッドや関数へ処理に必要な情報を渡すための値です。
例えば、2つの数値を足し算する処理では、計算対象となる数値を引数として渡します。
| 引数 | 渡す値の例 |
|---|---|
| 1つ目の数値 | 10 |
| 2つ目の数値 | 20 |
この場合、10と20が引数です。処理側は受け取った値を使って計算を行います。
引数が使われる例
- 検索する社員番号を渡す
- 送信先のメールアドレスを渡す
- 登録するユーザー名を渡す
- 計算対象の金額を渡す
- 保存するファイル名を渡す
同じメソッドでも、渡す引数を変えることで異なる処理結果を得られます。
戻り値とは
戻り値(Return Value)の概要
戻り値とは、メソッドや関数が処理を終えたあと、呼び出し元へ返す結果です。
先ほどの足し算を例にすると、10と20を引数として渡し、計算結果の30を戻り値として受け取ります。
| 項目 | 値 |
|---|---|
| 引数 | 10、20 |
| 処理 | 10+20を計算 |
| 戻り値 | 30 |
戻り値が使われる例
- 検索した社員情報を返す
- 計算した合計金額を返す
- ログインに成功したか返す
- 作成したファイルの保存先を返す
- 処理が正常終了したか返す
戻り値を受け取ることで、その後の処理を分岐したり、画面へ結果を表示したりできます。
引数と戻り値の違い
| 比較項目 | 引数 | 戻り値 |
|---|---|---|
| 役割 | 処理へ値を渡す | 処理結果を返す |
| 方向 | 呼び出し元から処理側 | 処理側から呼び出し元 |
| イメージ | 入力 | 出力 |
| 使用タイミング | メソッドや関数を呼び出すとき | 処理が完了したとき |
| 必須か | 引数なしの処理もある | 戻り値なしの処理もある |
具体例で理解する
社員情報を検索する処理を例に考えてみます。
Employee employee = findEmployee(1001);
この例では、社員番号の「1001」が引数です。検索された社員情報が戻り値になります。
| 要素 | 内容 |
|---|---|
| メソッド名 | findEmployee |
| 引数 | 1001 |
| 戻り値 | 社員情報 |
処理の流れは、次のとおりです。
- 呼び出し元が社員番号1001を渡す
- 検索処理が社員番号を使ってデータを探す
- 見つかった社員情報を呼び出し元へ返す
- 呼び出し元が戻り値を変数へ保存する
仮引数と実引数の違い
引数には、仮引数と実引数という言葉があります。
| 用語 | 意味 |
|---|---|
| 仮引数 | メソッドや関数を定義するときに受け取る変数 |
| 実引数 | メソッドや関数を呼び出すときに渡す実際の値 |
int add(int number1, int number2) {
return number1 + number2;
}
int result = add(10, 20);
この例では、number1とnumber2が仮引数、10と20が実引数です。
現場では両方をまとめて「引数」と呼ぶことも多いため、会話の前後から意味を判断します。
戻り値がない処理もある
すべてのメソッドや関数が戻り値を返すわけではありません。
例えば、画面にメッセージを表示する処理や、ログを書き込む処理では、結果を返さずに処理だけを行う場合があります。
void writeLog(String message) {
// ログを書き込む処理
}
JavaやC#では、戻り値がないメソッドにvoidを指定します。voidは「値を返さない」という意味です。
引数がない処理もある
処理に外部から渡す情報が必要なければ、引数を持たないメソッドや関数も作れます。
String getCurrentDate() {
// 現在日付を返す処理
}
この処理では引数を受け取りませんが、現在日付を戻り値として返します。
引数と戻り値の4つの組み合わせ
| 組み合わせ | 処理例 |
|---|---|
| 引数あり・戻り値あり | 社員番号を受け取り、社員情報を返す |
| 引数あり・戻り値なし | メッセージを受け取り、ログへ書き込む |
| 引数なし・戻り値あり | 現在日時を取得して返す |
| 引数なし・戻り値なし | 初期画面を表示する |
どの組み合わせを使うかは、処理の目的によって決まります。
なぜ引数と戻り値が重要なのか
引数と戻り値を適切に設計すると、メソッドや関数を再利用しやすくなります。
例えば、検索条件をメソッドの内部へ直接書いてしまうと、その条件でしか検索できません。検索条件を引数として受け取るようにすれば、同じ処理を複数の条件で利用できます。
また、処理結果を戻り値として返すことで、呼び出し元が結果に応じて次の処理を判断できます。
実際のIT現場での利用例
ユーザー認証処理
| 項目 | 内容 |
|---|---|
| 引数 | ユーザーID、パスワード |
| 処理 | 入力内容と登録情報を照合 |
| 戻り値 | 認証成功または認証失敗 |
商品検索処理
| 項目 | 内容 |
|---|---|
| 引数 | 商品コード |
| 処理 | データベースから商品を検索 |
| 戻り値 | 商品情報 |
ファイル出力処理
| 項目 | 内容 |
|---|---|
| 引数 | ファイル名、保存内容 |
| 処理 | 指定場所へファイルを保存 |
| 戻り値 | 保存の成否、保存先 |
初心者が混乱しやすいポイント
引数と戻り値の方向を逆に覚える
引数は処理へ入る値、戻り値は処理から出る値です。処理を箱に例えると、箱へ入れる材料が引数、箱から出てくる完成品が戻り値になります。
戻り値を受け取らずに捨ててしまう
戻り値があるメソッドを呼び出しても、結果を変数へ保存しなければ、その後の処理で利用できない場合があります。
calculateTotal(1000, 500);
この書き方では、計算結果が返されても保存されません。結果を使う場合は、変数で受け取ります。
int total = calculateTotal(1000, 500);
引数の順番を間違える
複数の引数がある場合、定義された順番で値を渡す必要があります。
例えば、氏名と部署名を受け取る処理に対して順番を逆にすると、誤った情報が登録される可能性があります。
引数の型を間違える
数値を受け取る引数へ文字列を渡すなど、データ型が一致しないとコンパイルエラーや実行時エラーになることがあります。
戻り値が必ず正常な値だと思い込む
検索処理では、データが見つからないとnullや空の値が返される場合があります。戻り値を利用する前に、結果が存在するか確認することが大切です。
確認結果の見方
ソースコードを読むときは、メソッド名だけでなく、引数と戻り値の型も確認します。
Employee findEmployee(int employeeId)
| 確認箇所 | 読み方 |
|---|---|
| Employee | 戻り値はEmployee型 |
| findEmployee | メソッド名 |
| int employeeId | 整数型の社員番号を引数として受け取る |
この宣言から、「社員番号を渡すと社員情報が返る処理」と判断できます。
ソースコードを確認する方法
GUIで確認する方法
Visual Studio、Visual Studio Code、Eclipse、IntelliJ IDEAなどの開発ツールでは、メソッド名へマウスポインターを合わせると、引数や戻り値の情報が表示されます。
メソッド名を右クリックし、「定義へ移動」や「宣言へ移動」を選択すると、実際の定義を確認できます。
便利なショートカットキー
| 操作 | 代表的なショートカット |
|---|---|
| 定義へ移動 | F12 |
| 入力候補を表示 | Ctrl+Space |
| ファイル内検索 | Ctrl+F |
| プロジェクト全体を検索 | Ctrl+Shift+F |
使用する開発ツールや設定によって、ショートカットは異なる場合があります。
CUIで確認する方法
コマンドプロンプトやPowerShellでは、検索コマンドを使ってメソッド名やreturn文を探せます。
PowerShellでは、次のようにソースファイル内を検索できます。
Get-ChildItem -Recurse -Filter *.java | Select-String "findEmployee"
JavaファイルからfindEmployeeという文字列を検索し、定義場所や呼び出し場所を確認できます。
業務でよくあるトラブル
引数へ不正な値が渡される
ユーザーIDが空、商品数がマイナス、ファイル名に使用できない文字が含まれているなど、不正な引数によってエラーが発生することがあります。
戻り値の判定が間違っている
戻り値がtrueなら成功、falseなら失敗という仕様なのに、判定を逆に書いてしまうケースがあります。
nullの戻り値をそのまま使う
検索結果がない場合にnullが返され、そのまま項目へアクセスするとNullPointerExceptionなどのエラーにつながります。
引数の仕様変更による影響
メソッドの引数を追加・削除すると、呼び出しているすべての箇所に影響する可能性があります。
原因を切り分ける順番
- エラーが発生したメソッド名を確認する
- 呼び出し時に渡している引数を確認する
- 引数の型、順番、値が正しいか確認する
- メソッド内部の処理を確認する
- 戻り値が想定どおりか確認する
- nullや空文字、0などの特殊な値を確認する
- 呼び出し元で戻り値を正しく判定しているか確認する
入力、処理、出力の順番で確認すると、原因を整理しやすくなります。
ログの確認方法
引数や戻り値に関する不具合を調査するときは、次の内容をログで確認します。
- メソッドが呼び出された日時
- 渡された引数
- 処理結果
- 返された戻り値
- エラーメッセージ
- スタックトレース
ただし、パスワード、個人情報、クレジットカード番号などをログへそのまま出力してはいけません。機密情報はマスキングする必要があります。
イベントビューアーを確認する場面
Windows上で動作するアプリケーションやサービスが異常終了した場合は、イベントビューアーも確認します。
- WindowsキーとRキーを押す
- 「eventvwr.msc」と入力する
- 「Windowsログ」を開く
- 「アプリケーション」を選択する
- エラー発生時刻付近の「エラー」または「警告」を確認する
イベントの日時、ソース、イベントID、例外名を控えておくと、開発担当者へ報告しやすくなります。
筆者が現場で経験した失敗
新人の頃、検索メソッドの戻り値には必ずデータが入っていると思い込み、nullの確認をせずに後続処理を実行したことがあります。
テスト環境には対象データが存在していたため問題に気付きませんでしたが、本番環境では一部のユーザーだけエラーになりました。
調査すると、検索条件として渡していた引数は正しかったものの、該当データがない場合の戻り値を考慮していないことが原因でした。
それ以降は、引数の正常値だけでなく、空、null、0、上限値、存在しない値も確認するようにしています。
新人がやりがちなミス
- 引数と戻り値を逆に説明する
- 引数の順番を間違える
- 戻り値を変数へ保存しない
- nullチェックを行わない
- 戻り値の型を確認しない
- 引数へ個人情報を渡したままログ出力する
- メソッドの仕様を確認せずに呼び出す
業務で上司へ報告するポイント
- 問題が発生したメソッド名
- 発生日時と対象ユーザー
- 渡された引数の内容
- 実際に返された戻り値
- 期待していた戻り値
- 再現手順
- 影響範囲
- ログやエラーメッセージ
機密情報を含む引数を報告するときは、そのままチャットやメールへ貼り付けず、社内ルールに従ってマスキングします。
エスカレーションするタイミング
- 引数が正しいのに想定外の戻り値が返る
- 複数の機能で同じエラーが発生している
- 本番データの修正が必要になる
- メソッドの仕様書と実装が一致していない
- 共通メソッドの変更が必要になる
- 影響範囲を判断できない
- 個人情報や認証情報がログへ出力されている
応用知識
参照渡しと値渡し
引数の渡し方には、値そのものを渡す考え方と、オブジェクトへの参照を渡す考え方があります。
言語によって動作が異なるため、引数として渡した変数がメソッド内の処理によって変更されるか確認が必要です。
複数の値を返したい場合
一般的なメソッドの戻り値は1つですが、配列、リスト、オブジェクト、タプルなどへ複数の情報をまとめて返すことができます。
例外と戻り値の違い
処理失敗を戻り値で返す設計もあれば、例外を発生させる設計もあります。
戻り値は通常の処理結果、例外は想定外のエラーを通知するために使われることが一般的です。
関連するIT用語
- メソッド
- 関数
- 変数
- データ型
- 戻り値の型
- 仮引数
- 実引数
- return文
- void
- null
- 例外処理
よくある質問(FAQ)
引数は必ず必要ですか?
いいえ。外部から値を受け取る必要がない処理では、引数を省略できます。
戻り値は必ず必要ですか?
いいえ。ログ出力や画面表示のように、処理だけを行う場合は戻り値を持たないことがあります。
引数は何個まで渡せますか?
言語や仕様によって上限は異なります。ただし、引数が多すぎるメソッドは読みづらくなります。関連する値をオブジェクトへまとめる設計も検討します。
戻り値を受け取らなくても実行できますか?
言語や処理内容によっては実行できます。ただし、戻り値を使う必要がある処理で受け取らないと、結果を後続処理へ活用できません。
returnとは何ですか?
returnは、メソッドや関数から呼び出し元へ値を返すための命令です。returnが実行されると、通常はその時点で処理を終了します。
引数とパラメーターは同じ意味ですか?
広い意味では同じように使われます。厳密には、定義側の変数をパラメーターや仮引数、呼び出し時の実際の値を実引数と呼びます。
まとめ
引数と戻り値は、メソッドや関数とデータを受け渡しするための基本的な仕組みです。
- 引数は処理へ渡す入力値
- 戻り値は処理から返される結果
- 引数も戻り値もない処理を作ることができる
- 不具合調査では引数、処理、戻り値の順番で確認する
- null、空文字、0、存在しない値などもテストする
ソースコードを読むときは、「何を引数として受け取り、何を戻り値として返す処理なのか」を確認してください。この習慣を付けると、処理の目的や不具合の原因を把握しやすくなります。
