【はじめに】
今回扱うのは、メソッドの引数・戻り値です。
メソッドを一度学習したけど、いまひとつピンと来ないという方に読んでいただければ幸いです。
メソッドを使う上で欠かせない考え方ですので、ぜひイメージできるようにしていきましょう。
※前提として
オブジェクト指向のインスタンス化を把握している、mainメソッドからクラスをインスタンス化し使用するイメージができる方を対象としています。
【参考記事】https://www.kenschool.jp/blog/?p=3553
【結論】
- メソッドはオブジェクトの持つ処理・機能
- 引数はメソッドを使うために必要なデータ
- 戻り値はメソッドの処理を行うと返してくれるデータ
この後自動販売機を使用する例では
販売機能 = メソッド
お金 = 引数
ジュース = 戻り値
というように対応する様子を見ていきます。
【具体例:日常生活】
まずは実際に日常生活で自分が自動販売機を使うときにどのようにすれば販売機能を使えるか確認します。
★自動販売機の販売機能を使うイメージを確認★
- お金を投入
- 商品の販売ボタンを押す
- 商品が出てくる
自動販売機を使う際に、販売機能を使うためにお金を渡してあげると商品を得ることができるということです。
【具体例:プログラムで表現】
上で確認した、自動販売機を使用するという内容を表現したプログラムを用意してみましたのでそれを確認しながら、引数と戻り値のイメージをプログラムの記述として確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class Drink{ String name = "Kenドリンク"; //商品名を表現 int amount =100; //商品の容量を表現 } class VendingMachine{ //販売機能を表現したメソッド Drink sellDrink(int money){ Drink drink = null; if(money==100){ drink = new Drink(); return drink; }else{ return drink; } } } //mainメソッドを持つ実行クラス class UseVendingMachine{ public static void main(String[] args){ VendingMachine vm = new VendingMachine(); Drink drinkObj = vm.sellDrink(100); System.out.println(drinkObj.name + "を購入しました"); System.out.println("内容量は" + drinkObj.amount + "ミリリットルです"); } } |
【プログラム解説】
Drinkクラスは販売される飲み物を表現したクラスです。
商品名と内容量を表現するためのフィールドだけ定義してあります。
VendingMachineクラスは自動販売機を作るためのクラスです。
今回、自動販売機が持つ、販売機能を表現するものとしてsellDrinkメソッドを定義しました。
UseVendingMachineクラスは自動販売機を使うことを表現したクラスです。
mainメソッドを定義しVendingMachineクラスをインスタンス化し、sellDrinkメソッドを使用しています。
メソッドの戻り値として手に入るDrinkクラスオブジェクトのフィールドを利用して画面への表示を行います。
※戻り値がnullの場合の処理は割愛しています。
【定義から考える】
Javaでクラスにメソッドを定義する際は
1 2 3 4 5 |
戻り値のデータ型 メソッド名 (引数のデータ型 引数名){ 処理の内容 } |
という順番で書く必要があり、
今回のサンプルのソースコードは
1 2 3 4 5 |
Drink sellDrink(int money){ ~中略~ } |
としています。
このJavaで書いた定義部分を日本語で説明しなおすと以下のようになります。
Drink型のオブジェクト(ジュース)を戻り値として返す、sellDrinkという名前のメソッド(販売機能)であり、使用するためには引数としてint型のデータ(お金)を渡して貰う必要があり、その貰ったデータはmoneyという変数(機械のコイン収納部)に入り、そしてその変数を利用しながら処理を行う、という仕様の機能です。
【呼び出しから考える】
今度はメソッドを使用している部分(呼び出し)から読み解いてみます。
1 2 |
VendingMachine vm = new VendingMachine(); Drink drinkObj = vm.sellDrink(100); |
呼び出しとはメソッドを使うということですが、vm.sellDrink(100)が呼び出し部分です。
( )の中に100という数値が書いてありますがこれが引数であり、言い換えるとsellDrinkメソッドを使うときに「引き渡してあげる値」です。
自動販売機の販売機能を使うときにお金を入れるということと照らし合わせて考えてみてくださればわかりやすいはずです。
【まとめ】
今回は具体的に日常生活で使用している自動販売機の販売機能を例にあげてみましたが、さまざまな機械や物が持つ機能に当てはめてみていただくとより引数・戻り値がわかりやすくなると思います。オブジェクトの持つ機能を使いこなすためにぜひイメージできるようにしてみてください。