すべての処理をすべてmain( )に書いても良いのですが、すべての処理を1箇所に書いた場合、プログラムが長くなったとき、どのような処理を行っているのか判り難くなります。
また、似た処理を何度も行う場合、似たようなコードが複数回出てくる事になります。
これでは同一の内容を何回も書く煩雑さが発生してしまいます。
メソッドを利用することでこういった問題点を解決する事ができます。
メソッドとは
メソッドとは、何かを行う処理の固まり、集まりと考えることができます。
この処理の集まりは、入力と出力だけを知っていれば利用することができます。
例えば、ジュースの自動販売機を思い浮かべてください。
ジュースの自動販売機は「ジュースを販売する」という処理を行うことができます。
その際、自動販売機を使う人(お客様)は、お金を入れて、ジュースの種類を選ぶと、ジュースが出てきます。
自動販売機が内部でどういう処理をしているのかまでは、使う人(お客様)は知る必要がありません。
この話を整理すると、次のようになります。
- お金 (自動販売機への入力)
- 選択したジュースの種類 (自動販売機への入力)
- 出てきたジュース (自動販売機からの出力)
すなわち、自動販売機とはお金をジュースに替える機能があるといえます。
メソッドもこの自動販売機と同じように、データ入力を受けて、それに対する処理をして、データを出力する事ができます。
入力データと、出力データのことをそれぞれ次のように呼びます。
- 入力データ 引数(ひきすう)
- 出力データ(処理結果) 戻り値(もどりち)
ただし、メソッドによっては引数、戻り値がないものがあります。(両方ともない場合もあります)
メソッドを活用する利点
メソッドのことをプログラム言語によっては関数と呼んでいます。
関数は、何らかのデータを受け取り、その処理結果を返すところが数学の関数に似ているところからついた名前です。
Javaのメソッドも何らかのデータを受け取り、その処理結果を返す物としてみることができます。
メソッドや関数はプログラム言語が生まれたときからあったものではなく、プログラム言語が進化する過程で新たに付加された考え方です。
最も初期からあったプログラム言語であるアセンブラ言語では次のような難点があったのです。
- 意味のある処理をまとめることができない
- 何度も使う処理をまとめづらい
- 処理ごとに整理がされていないのでソースコードが読みにくい
用語:アセンブラ言語
アセンブラ言語は原始的な言語ですが、今でもオペレーティングシステムの中心部やデバイスドライバの作成で使用されているプログラム言語です。
この難点を解決するために導入されたのがメソッドです。
そして、メソッドを導入することで次のようなメリットが得られます。
- プログラム(ソースコード)が読みやすくなる
- 何度も同じ処理を書かなくてよい
引数と戻り値
メソッドには引数と呼ばれる入力データと戻り値と呼ばれる出力データがあります。
これらはどちらも省略が可能ですので、メソッドの記述の組み合わせとしては4つの書き方があります。
- 引数、戻り値の両方があるもの
- 引数があり、戻り値がないもの
- 引数がなく、戻り値があるもの
- 引数、戻り値両方ともないもの
この4つのメソッドのイメージは以下のようになります。
メソッドの利用
メソッドを利用するには以下の書式を使います。
「戻り値」の部分には変数を、「引数」のところには変数や定数を指定します。
メソッドを利用することを「メソッドの呼び出し」と表現することもあります。
戻り値 = メソッド名(引数1, 引数2, 引数3, …);
メソッドを利用する際はいくつかのポイントがあります。
- 戻り値は = で受け取る
メソッドの中には戻り値を返すものがありますが、必要であれば = 記号で結ぶことで、変数などに戻り値を格納することが可能です。
- 戻り値は必ず受け取らなくても良い
メソッドの中には戻り値を返すものがありますが、受け取らなくても構いません。
必要であれば受け取る、必要なければ受け取らないというスタイルです。
- 引数として渡すデータ
引数として渡すデータのデータ型には注意してください。
引数のデータ型は、渡す方と、受け取る方(メソッド側)で一致していなくてはなりません。
- 引数と戻り値の数
どのようなメソッドでも戻り値は1つしか返せません。
引数はメソッドによっては複数必要とするものもあります。
複数渡す必要がある場合は、( , )カンマで区切って渡します。
使用可能なメソッド
使用可能なメソッドには次の2種類があります。
- Javaのライブラリにあるメソッド
実はこれまでのプログラムでも多くのメソッドを利用しています。
例えば、データをコマンドプロンプトの画面に出力する際に用いてきたprintln( )などはメソッドの具体例の1つです。
println( )というメソッドに”Hello World”という文字列をデータとして渡し、処理結果は画面出力するというものです。
System.out.println("Hello World");
println( )はJavaの「ライブラリ」が用意しているメソッドを利用している形態です。
ライブラリとは、プログラムで最初から利用可能な部品や機能と考えてください。
このように、Javaにはプログラムの中で部品として使えるメソッドが多く用意されています。
- 自分で作成したメソッド
メソッドはすでにライブラリで用意されているものだけでなく、足りないものを自分で作成することができます。
今まで作ったプログラムのすべてに存在しているmain( )もメソッドであるといえます。
これは我々がメソッドを定義しているひとつの例です。
public static void main(String[ ] args){ }
ただし、メソッドを作成する際は、以下の点に気をつける必要があります。
メソッド作成時の注意点
- メソッドには処理内容と関係の深い名前をつける
例えば足し算を行うメソッドであれば「add」等の名前をつけます。
- メソッドには意味的にまとまった処理を記述する
ファイルから文字列を取ってくるメソッドであれば、メソッドの中で処理を完結させます。
- メソッドの処理内容をコメントとして残す
どのような処理を行うのか、具体的な例や内容をコメントとして残します。
【Javaのクラスライブラリの利用】
public class Dice{ public static void main(String[ ] args){ int i = (int)(Math.random( ) * 6) + 1; // キャストする System.out.println("ランダムに生成した数値は : " + i + "です"); } }
実行結果
ランダムに生成した数値は : 3です
上記のソースコードの3行目において、
int i = (int)(Math.random( ) * 6) + 1; // キャストする
と計算しています。
Math.random( )は0から1.0より小さい数値を出力します。
これに6をかければ0から5の実数になります。
これに1を足すと1から6の実数になります。
これをint型にキャストすれば1から6の整数になります。
例えば、0.2が生成された場合は、0.2 * 6 + 1 = 2.2となり、これをintでキャストすると、2となります。
ところで、今回は戻り値を変数には格納していません。
しかし、この4行目は次のようなコードとまったく同じ意味を持ちます。
double rand; rand = Math.random( ); int i = (int)(rand * 6) + 1;
randは戻り値を格納するためだけに使われる変数です。
こういった変数をわざわざ宣言するのが面倒な場合があります。
randには = による戻り値の代入が行われています。
つまり、randと書いている場所はMath.random( )と書いても同じことなのです。
【Javaのクラスライブラリの利用2】
文字列型の情報をint型に変換して演算してみます。
Integer.parseInt( )メソッドは文字列を引数にとり、引数の文字列が表す数値を返します。
ヒント!文字列と数値について
文字列としての”100”と数値の100はコンピュータの中では違うものです。
”100”はあくまでも文字列であり、数値100ではありません。
つまり、見た目の”100”とコンピュータ内部の数値としての100は別のものなのです。
public class StringToInt{ public static void main(String[ ] args){ String str = "100"; int i = Integer.parseInt(str); //文字列の"100"を整数の100に変換 int ans = i + 20; //i はstrの表す文字列と同じ意味の数値が入っている System.out.println("足し算の結果 : " + ans); } }
足し算の結果:120
まとめ
- メソッドとは
メソッドとは、処理の固まりや集まりでです。
- メソッドを利用する利点
メソッドを利用することで、何度も似たような処理を記述する必要がなく、プログラムが簡潔になります。
- 引数と戻り値
メソッドには入力データである引数を渡すことができ、出力データである戻り値を受け取ることが可能です。
- メソッドの利用
メソッドは自分で作ることができ、ライブラリとして用意されている既存のものを使うこともできます。
参考図書
独学で挫折しそうになったら、オンラインプログラミングスクール