メソッド

■ メソッド(関数)


はじめに


メソッド、引数、戻り値に関して学んでいきましょう!

Step1 : メソッド(関数)


メソッド とは、幾つかの 処理をまとめて入れておくもの です。
たとえば「Aさんにメールを送る」という処理が記述されている メソッドがあったとします。
それを100ケ所で使う場合は、同じコードを100回記述するのではなく、 メソッド を呼び出すだけで済みます。
仮に「Aさんにメールを送る」という処理を「Aさん、Bさん、Cさんにメールを送る」と修正する必要があったとしても
メソッド の処理を変えれば、100箇所に反映されます。コーディングする上でも基本的な考え方になります。

メソッドってこんなのです

解説① アクセス修飾子(省略可)

忘れた方は、ぜひ以前やった部分を見直してみてください!
クラス・フィールド変数

解説② 戻り値の型

これは、このメソッドを実行したらどの型の値を返すのか(「戻り値 や 返り値」といいます。)を指定します。
詳しくはもう少し進んだところにありますが、そんなことを書いてるんだな〜と思っておいてください。
【型について】
データ型・文字列型

解説③ メソッド名

これが メソッド です。
output と記述するだけで、output 内の処理が実行されます。
メソッド名は、処理のタイトルのような役割をしていて、同じ処理をする場所に記述していくことで、
なんども同じコードを書かなくて済むということになります。

解説④ 丸括弧内に引数の型

このメソッドを実行する際に一緒に渡される値のことです。
渡される値のことを引数といいます。
(※引数については、Step2で詳しく解説します

以上の①、②、③、④の順で記述し、 ブロック{ }で囲むようにして実際の処理を記述します。
メソッド名はオリジナルの名前を記述することが可能ですが、
最初の一文字は半角英小文字で記述するという慣習 があります。

Step2 : 引数とは


関数に何か処理を依頼する際、「このデータを使って処理をしてほしい」ということがあります。
この時関数へ受け渡す値を 引数 といいます。
引数は一つだけでなく、 複数指定することができ 、複数指定する際は ,(カンマ) で区切ります。

メソッドサンプル

例として、底辺( base )が 10 、高さ( height )が 5 の三角形の面積の合計を求め、
コンソールへ出力する関数を作成してみましょう。

Study.java

public class Study {

    /**
     * 三角形の面積を求めて出力するメソッド
     * 
     * @param param 底辺
     * @param height 高さ
     */
    public void printTriangleArea(int param, int height) {
        int area = param * height / 2;
        System.out.println(area);
    }

}
Main.java

public class Main {

    // mainメソッド
    public static void main(String[] args) {

        // 底辺(base)と高さ(height)の変数を指定
        int base = 10;
        int height = 5;

        // Studyクラスのインスタンスを生成して、Studyクラス型の変数studyに保持する
        Study study = new Study();

        // 生成したインスタンスから、StudyクラスのprintTriangleAreaメソッドを呼び出す
        study.printTriangleArea(base, height);

    }
}

ポイント①

Study.javaの printTriangleArea メソッドは int param, int height が引数になってます。
つまり、 printTriangleArea メソッドは、 int型2つ 受け取れることになります。

Main.javaでは、Study.javaの printTriangleArea メソッドに値を渡す必要があります。
その引数は baseheight となります。

※「インスタンス」というワードは次章で解説します。

ポイント②

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. 結果出力: たくさん!!!

※本当に検索してみた結果、2019/03/08現在では「231,000件」の結果があるようです。

「2件以上の結果が返却された=記事情報が配列として返却された」 と解釈してみると、
public 記事情報[] search(検索文字列) { } といった定義のされ方をしているのでは?
とも想像することができそうですね!

戻り値の型 = return文に指定する処理結果の型

「戻り値」がある場合は、 処理の結果を返す必要がある ので、
return文 を記述して処理結果を呼び出し元へ返すようにします。
その時、 戻り値の型return文に指定する処理結果の型 が合ってなければなりません。

また、メソッドの処理結果を呼び出し元へ返す必要がない場合は、
戻り値の型を「 void 」 と記述して、戻り値なしのメソッドにします。
voidとは 「このメソッドの戻り値は返しません(ありません)」 という意味のキーワードになります。

戻り値 あり の場合

...

// 引数に渡された x と y の値を加算し、加算結果を呼び出し元へ返すメソッド
public int plus(int x, int y) {
    return x + y;
}

...

戻り値 なし の場合

...

// フィールド「message」の内容を画面に表示するメソッド(戻り値なし)
public void print() {
    System.out.println(message);
}

...

例題

public class Main {

    public static void main(String[] args) {

        // plusメソッドの足し算に使用する変数と値を設定する
        int x = 10;
        int y = 5;

        // plusメソッドに上記で設定したxとyを渡して足し算してもらい、変数resultに格納する
        int result = plus(x, y);

        // 足し算の結果をprintメソッドに渡して表示してもらう
        print(result);

    }

    /** plusメソッド:渡された引数を元に足し算をして結果を返してくれる
     *  足し算した結果を他の処理に用いたい為、戻り値ありにしています
     */
    public static int plus(int x, int y) {
        // 受け取ったxとyを足し算して結果を返してあげる
        return x + y;
    }

    /** printメソッド:渡された引数を表示する
     *  ここでは表示をするのみで、結果を他に用いるわけではないので戻り値なしにしています
     */
    public static void print(int result) {
        System.out.println(result);
    }
}

解説

1:まずは足し算に使用する変数とその値をそれぞれ設定してあげます。
2:1で用意した変数をplusメソッドに渡して足し算をしてもらい、その結果「15」を返してもらって変数「result」に格納します。
3: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 makeSomeIdea())

【private】

  • 内装: private void makeLayout()
  • 衣装作成: private void makeCostume()

このようにイメージをふくらませることで、
適用すべき修飾子が理解できてくると思います。

課題


Java初級からはEclipseでの課題対応となります。
※ プロジェクトの作成方法については Eclipseの使い方 を参考にしてください。

プロジェクト名・・・ 2-1
パッケージ名 ・・・ study (java クラス作成時に設定してください。)
Java クラス名 ・・・ Main.java (下記コードをコピー)

package study;

/**
 *
 * 本課題では、フィールド変数、メソッドの基本的な使い方を学んでいきましょう。
 * 課題範囲は以下のとおりです。
 *   Main.java: 問①から問③
 * 指定された値と変数名を守って記述してください。
 *
 */
public class Main {

    public static void main(String[] args) {

    	//① firstNameとlastNameという名前の変数を定義し、
    	//   firstNameには自分の名前、lastNameには自分の名字で初期化しなさい


        //getName関数の呼び出しと出力
        System.out.println(getName(firstName, lastName));
        System.out.println();

        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //③ arr 配列をループさせ、isOdd関数を使って配列の要素が奇数かどうかの判定を行いなさい。
        //   要素が奇数の場合には「nは奇数です。」と出力されます。



    }

    //② 関数を定義しなさい。
    //   関数名:getName
    //  修飾子:public
    //   引数には①で定義したfirstNameとlastNameを引数で受け取り、
    //  last_name と first_name を連結した値を返り値とする変数を定義しなさい。




    //奇数の判定を行う。
    public static void isOdd(int num) {
    	if(num % 2 != 0) {
    		System.out.println(num + "は奇数です。");
        }
  }
}

以下の添付画像のようにコンソールへ出力されるよう課題を実施し提出してください。

課題を提出するときには、「2-1」ディレクトリ配下にあるすべてのファイルをコミット、プッシュしてください。

カテゴリー

アーカイブ

Close Bitnami banner
Bitnami