はじめに
コンストラクタに引き続いて「メソッド」「 引数」「 戻り値」に関して、 さらに理解を深めましょう。
少しづつJavaの解像度をあげて行きましょう!
Step1 : メソッド(関数)
メソッドとは、幾つかの処理をまとめて入れておくものです。
たとえば「Aさんにメールを送る」 という処理が記述されているメソッドがあったとします。
それを100ヶ所で使う場合は、同じコードを100回記述するのではなく、メソッドを呼び出すだけで済みます。
仮に「Aさんにメールを送る」 という処理を 「Aさん、Bさん、Cさんにメールを送る」 と修正する必要があったとしてもメソッドの処理を変えれば、 100箇所に反映されます。
コーディングする上でも基本的な考え方になります。
メソッドってこんなのです
解説① アクセス修飾子 (省略可)
忘れた方は、ぜひ以前やった部分(クラス・フィールド変数 )を見直してみてください!
解説② 戻り値の型
これは、このメソッドを実行したらどの型の値を返すのか (「戻り値や返り値」といいます。)を指定します。
詳しくはもう少し進んだところにありますが、 そんなことを書いてるんだな〜と思っておいてください。
【型について】
データ型 文字列クラス
解説③ メソッド名
メソッド名は 処理のタイトルのような役割をしていて、 同じ処理をする場所に記述していくことで、
なんども同じコードを書かなくて済むということになります。
例えばoutput (0)と記述するだけで、 output 内の処理が実行されます。
解説④ 丸括弧内に引数の型
このメソッドを実行する際に一緒に渡される値のことです。渡される値のことを引数(ひきすう)といいます。
(※引数については、 Step2で詳しく解説します
以上の①、②、③、④の順で記述し、 ブロック { } で囲むようにして実際の処理を記述します。
メソッド名はオリジナルの名前を記述することが可能ですが、最初の一文字は半角英小文字で記述するという慣習があります。
Step2 : 引数とは
関数に何か処理を依頼する際、「このデータを使って処理をしてほしい」ということがあります。
この時「関数へ受け渡す値」を引数といいます。
引数は一つだけでなく、 複数指定することができ、 複数指定する際は ,(カンマ)で区切ります。
メソッドサンプル
例として、底辺 (base) が10 高さ(height)が5の三角形の面積の合計を求め、コンソールへ出力する関数を作成してみましょう。
ポイント①
Study.javaのprintTriangleArea メソッドは int param, int height が引数になってます。
つまり、printTriangleArea メソッドは、 int型を2つ受け取れることになります。
Main.javaでは、Study.java の printTriangleArea メソッドに値を渡す必要があります。
その引数はbase と height となります。
※「インスタンス」というワードは次章で解説します。
ポイント②
Study.javaのprintTriangleArea メソッドでは、変数名が、param,height となっていますが、 Main.javaではstudy.printTriangleArea (base, height) となってます。
渡す変数と受け取る変数の名前が違っていますが、これは問題ありません。
大切なのは、メソッドの型とその順番です。
printTriangleArea メソッドはint型を2つ受け取れるメソッドなので、 その順番の通りに変数の中身 (今回の場合 int型) が受け渡されるため問題ないです。
ただし、メソッド内と呼び出し側とで著しく異なったり、意味がかけ離れたりするような命名は避けましょう。
(メソッド名と引数はそのメソッドの処理とマッチするよう作成しましょう!
Step3: 戻り値とは
メソッドには、 メソッドの呼び出し元にメソッドからの特定の情報を返すという仕組みもあります。
そのメソッドから返される特定の情報のことを戻り値 or 返り値(return 値 の部分)といいます。
「何かをしたら、 何かしらのレスポンスがある」 といったイメージになります。
ここからはより具体的にイメージしていきましょう。
イメージ: 電卓
電卓は比較的イメージしやすい例になります!
【手順】
1. 引数:1 + 1
引数として必要な情報を入力します
↓
2. 実行「=(イコールボタン)を押下」
計算してもらうために、メソッドの呼び出しを行います。
↓
3. 結果表示:2
電卓が 1+1 を計算して、結果を表示してくれます。
上記の流れのでは
- 「1+1 」が引数
- 「2」 が返り値
のようになります。
イメージ: 自動販売機
電卓同様、自動販売機もよい例になります!
【手順】
1. 引数:150円
↓
2. 奥行 「欲しい飲み物のボタンを押下」(例:ドクターペッパー)
↓
3. 結果出力:ドクターペッパー
ドクターペッパーのチョイスは置いておいて、こちらも比較的イメージしやすいのではないかと思います。
イメージ: Googleの検索フォーム
これはIT感ありますね。
今後みなさんが触れていく作業としては一番近いイメージでしょうか。
「メソッドってどう書くんだろう? 」と疑問に思いGoogleの検索フォームで調べてみるシチュエーションとしましょう。
【手順】
1. 引数: Java メソッド 書き方
↓
2. 実行 「検索ボタンを押下」
↓
3. 結果出力: たくさん!!!
「2件以上の結果が返却された記事情報が配列として返却された」と解釈してみるとpublic 記事情報 [ ] search (検索文字列{ })
といった定義のされ方をしているのでは? とも想像することができそうですね!
戻り値の型 = return文に指定する処理結果の型
「戻り値」 がある場合は、 処理の結果を返す必要があるので、return文を記述して処理結果を呼び出し元へ返すようにします。 その時、戻り値の型と return文に指定する処理結果の型が合ってなければなりません。
また、メソッドの処理結果を呼び出し元へ返す必要がない場合は戻り値の型を「void」と記述して、戻り値なしのメソッドにします。
void とは 「このメソッドの戻り値は返しません (ありません)」という意味のキーワードになります。
戻り値ありの場合
戻り値なしの場合
例題
- まずは足し算に使用する変数とその値をそれぞれ設定してあげます。
- 1で用意した変数をplusメソッドに渡して足し算をしてもらい、その結果「15」を返してもらって変数「result」に格納します。
- 2の足し算の結果 「result」をprintメソッドに渡して 「15」表示してもらいます。
メソッドには、 戻り値があって引数がないパターンや、戻り値がなくて引数があるパターンなど自由自在に作成することが可能です。
プログラミングの用途に合わせて、自分自身でどのパターンのメソッドにするか決めて作成します。
一般的な修飾子の考え方
フィールド変数は private で記述し、メソッドは public で記述することがほとんどです。
例としては、以下のようなイメージを持つといいでしょう。
ある高校のクラスが10クラスあって、文化祭の出し物を考えているとします。
基本的には各クラスで考えた出し物はそのクラスのものです。
3組で決定した文化祭の出し物 (アイデア) は、3組だけで使用するから private にする。
でも、1組と3組がやりたい出し物が被ってどうしよう?ってなった場合は、きっと相談して「共同してやる」って発想が出て来るはずです。
そうしたら、共同で使用できるように public (or 共通の親クラスを作って protected でも可)」にする。
というような感じでしょうか。
なので、フィールド変数はそのクラスだけで使用することが多いのでprivate とし、メソッドはいろんなクラスで使用することが多いので public で記述するのです。
仮に合同の出し物が 「お化け屋敷」 だったとしましょう。
その場合、1組と3組で作業分担 (1組は内装、3組は衣装作成とか)もするでしょうから、private なものとしてそれぞれの組専用の作業 (メソッド) があるとも推測できますね。
【public】
- (お化け屋敷の)構成を考える (public void makesomeldea())
【private】
- 内装: private void makeLayout()
- 衣装作成: private void makeCostume ()
このようにイメージをふくらませることで、適用すべき修飾子が理解できてくると思います。
課題
Java 中級からはEclipseでの課題対応となります。
2-4のフォルダの中にプロジェクトがありますので、インポートして対応してください。
