メソッド


■ メソッドとは

プログラムを作る時、同じような処理をいくつも書く必要が出てくることがあります。 このような場合、その都度プログラムを記述していると、大変面倒で時間がかかるだけでなく、すでに正しく動いたプログラムを再度書くことによって、新たな誤りも起こる可能性があります。

このようなことを避けるために、あるまとまりのある処理をひとつのプログラムとして記述しておき、それを別のプログラムから実行させることができれば、プログラムを作成するうえで非常に効率が良くなります。

さらに、非常に長いプログラムは、人間にとって大変読み辛いものです。 そのために、ある小さなまとまりのある処理毎に、それが分かるように記述しておくことができると、大変読みやすく分かりやすくなります。

メソッドは、このような目的のために使われるプログラムを作るひとつの方法です。 他のプログラム言語では、関数あるいはサブルーチンと呼ばれる似た機能があります。全く同じではありませんが、Java言語ではメソッドと呼びます。

■ メソッドの記述

皆さんのテキストには、冪乗(ベキ乗)の計算の例が使われていますが、ここでは、「su1という数が、su2で割り切れるか否かを検査する」プログラムを考えてみることにします。dt1とdt2は、それぞれキーボードから入力された整数です。その数をもとに割り切れるか否かを調べるメソッドをhantei()とします。


// 数値を入力し、割り切れるか否かを判定し(メソッド使用)、結果を表示する。
import java.io.*;

public class SuuHantei1{
    public static void main(String[] arges) throws IOException {
	String  su1, su2;
	int dt1, dt2, kekka;
                   
	BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));

                   System.out.print("数値を入力して下さい。");
                   su1 = kbd.readLine();
	while(!(su1.equals(";"))){          
                       System.out.print("割る数を入力して下さい。");
                       su2 = kbd.readLine();
	     try{
	         dt1 = Integer.parseInt(su1);
	         dt2 = Integer.parseInt(su2);
	         kekka = hantei(dt1,  dt2);
		 if(kekka==0){ 
                                                   System.out.println("数"+dt1+"は、"+dt2+"で割り切れます。");
	                     }else             		 {
                                                   System.out.println("数"+dt1+"は、"+dt2+"で割り切れません。");
                                         }
	     }
	     catch(NumberFormatException e){
	      System.out.println("数値を入力して下さい");
	         continue;
	   }
                       System.out.print("数値を入力して下さい。");
                       su1 = kbd.readLine();
	}
    }

    public static int hantei(int x, int y){
	int amari=0;
	amari=x%y;
	if(amari==0){return 0;}
	else {return 1;}
    }
}
今まで作成されたプログラムは、main()という特殊なメソッドと考えることもできます。 上記のプログラム例では、SuuHantei1というクラスに、main()とhantei()という2つのメソッドが含まれていることが記述されています。

hanteiメソッドは、「割られる数と割る数を受け取り、割り切れる場合は、戻り値として0(ゼロ)を返し、割り切れない場合は戻り値として1を返す」処理をします。

mein()にある、次の命令でhantei()メソッドが呼び出され実行され、結果がkekkaに代入されます。

                   kekka = hantei(dt1,  dt2); 

■ メソッドの構成

メソッドは、上記のプログラム例でも分かるように、次の3つから構成されています。
  • データを受け取り(引数)
  • 処理をして
  • 結果を戻す(戻り値)
このうち、メソッドによっては、引数とか戻り値が略される場合もあります。 これらの関係は、次のようになっています。

■ 戻り値のないメソッド

上記のプログラム例の場合、hanteiメソッドはint型で宣言されていますので 、戻り値は整数となります。ここでは、1か0が戻されます。

プログラムによっては、戻り値を求めない場合もあります。この場合、 メソッドの宣言で、void という型名を使います。

  public static void myfunc(int a){
            プログラム文
 }
戻り値がない場合は、メソッドの最後は、
            return;
だけで、特に値を与えません。また、このreturnがない場合は、プログラムの終了箇所でメソッドを終了します。その後、呼び出したプログラムに制御が移ります。

■ 引数のないメソッド

引数のないメソッドの場合、値が渡たされないということですから、引数を定義する部分は、次の記述例のように空となります。つまり何も記述しないということです。但しカッコは記述する必要があります。
  public static double getRnd(){
         プログラム文
 }

■ 引数も戻り値もないメソッド

引数と戻り値の両方がないメソッドは、次のような記述例になります。
   public static void startMsg(){
             プログラム文
  }
■ メソッドとの文字列のやりとり

文字列をメソッドに引数として渡すときは、String型を使います。したがって、 メソッドで受け取る場合も、Stringで引数を定義しておく必要があります。 その他は数値の場合と同じです。

プログラミング / 江木