【初学者向けJava言語】では変数と定数、演算子、条件分岐、繰り返し文などJava言語のプログラミングに関する基礎の内容について詳しく説明しています。
これらはJava言語の基本的な部分であり、まだ Java の本質に触れることはできていません。
Java言語 はオブジェクト指向言語とよくいわれており、これは最大の特徴でもあります。Java の醍醐味を知るためには、今回説明するメソッドについて理解する必要があります。
Java 言語の特徴から機能についてわかりやすく説明していきます。
メソッドとは
- Java はオブジェクト指向の言語
- 複数のオブジェクトを組み合わせて1つのプログラムを作成
- オブジェクトの構成を定義するのはクラス
- ex . class Helloworld {
- 個々のオブジェクトはフィールド(変数などの情報)とメソッド(命令文などの機能)からなる
- 今回説明するメソッドは「関数」に相当する機能を扱う
1つのプログラムは複数のオブジェクトの組み合わせでできています。
例えば車でいうとタイヤ・エンジン・ライト・・・・など様々な部品から成り立っています。
この1つ1つの部品がオブジェクトになります。
この1つ1つのオブジェクトを構成するのがクラスになります。
これまで条件分岐、繰り返し文など説明してきましたが、これらはクラス単位でのプログラム処理についての説明でした。
このような複数のクラスが組み合わさることによって、1つの完全なプログラムとなります。
個々のオブジェクトは役割によって書く内容と場所が違います。
大抵のオブジェクトには、フィールドとメソッドという2つのものを記述します。
フィールドには変数などの情報をメインに記述します。例えば変数を宣言して数字を代入するなどです。
【初学者向けJava言語】で説明してきた内容では、このフィールドの部分でなんらかの計算を一緒に記述してきました。
ですが、綺麗なプログラムを記述するためにはやはりメソッドの部分で記述するのが一般的です。
このメソッドというのは命令文などの機能を記述するための場所です。
今回はこのメソッドを初めて学ぶ初学者向けに、メソッドを関数扱いにして説明していきたいと思います。
何らかの機能を実現する箇所、命令文のグループ、命令文の集合と理解してください。
メソッドの利用
- メソッドは特定の処理をおこなう命令の組み合わせ
- 組み合わせた命令が繰り返して出てくる場合、効率的な記述をしたい
- 組み合わせた命令そのものを新たな「命令」として定義
- 必要に応じて呼び出す
【初学者向けJava言語】ではこれまで条件分岐、繰り返し文など様々なプログラムについて説明してきました。
これらはすべて特定の処理を行う命令の組み合わせです。
実際の実務上では、場合によっては一連の処理を何千回も何万回も繰り返す必要があります。
それをこれまで説明してきたように、その都度いちいち命令を実行させるたびに記述しなければならないと、非常に不便です。
なのでこれを効率よく記述するためには、これらを組み合わせた命令を「新たな命令」として定義して、一ヵ所にまとめて記述し必要に応じて呼び出せば良いのです。
これがメソッドの記述となります。
メソッドの宣言
- クラスの構造
- class クラス名 {
- フィールドの宣言 // 情報
- メソッドの宣言 // 機能
- }
- メソッドの宣言のしかた
- void メソッド名 ( ) {
- 命令文
- }
具体的にメソッドをつかうためには、まず宣言をする必要があります。
このメソッドも変数や配列などと同様に最初に宣言をし、そのうえで使用することができます。
まずクラスの構造ですが、さきほど説明したフィールドとメソッドの2つの記述があります。
順番はどちらが先でもかまいませんが、一般的にはフィールドの後ろにメソッドを記述します。
まず数値などの情報を整えて、それに対してどのような命令をおこなうのかの機能を記述します。
メソッドの宣言のしかたは void メソッド名( )⇐ ( )内は必要に応じて追記することは可能ですが、なにも無ければ空のままで大丈夫です。
void についてはこちらを参考にしてください。
メソッド呼び出し処理の流れ
main のプログラムは呼び出し側として、右の方がメソッド(呼び出される側)となります。
呼び出し側で①のなんらかの処理をおこなって、メソッドを使っての処理をしたい場合一旦 main のプログラムから抜けて②で処理を行います。
ここで処理が終わったら③の処理へ戻ります。
インスタンスに関してはこちらを参考にしてください。
メソッドの書き方
こちらの数当てゲームのプログラムを改良してメソッドの書き方を練習してみましょう。
- 簡単なメソッド ShowMessage ( ) の作成
- 「正解の数を当てましょう。0~9までの数字を1つ入力してください」と表示するメソッド
- オブジェクトの構成を定義するのはクラス
- プログラムの中で2回(初回実行時と10以上の数字が入力されたとき)呼び出す
- 記述されている位置と( )の対応に注意する
メッセージの出力に関するメソッドです。
メソッドであることを示すためにメソッド名の後ろには必ず( )を付けてください。
メッセージの内容は「正解の数を当てましょう。0~9までの数字を1つ入力してください」です。
これは数当てゲームの中で、コマンドプロンプトで入力を促すメッセージのことです。
今回のメソッドの内容は少なくともプログラムの中で2回は表示されます。
まず初回実行時に入力を促して、次はもしユーザーが0~9以外の、例えば10以上の数字を入力してしまった場合にエラーメッセージとして表示して警告をおくります。
0~9までの数字を入力するまでは永遠にこのメッセージを表示し続けます。
ここで気を付けなければならないのは、このメソッドを記述する場所です。
また{ }の対応にも注意してください。
- static void ShowMessage ( ) {
- System . out . print ( ” 正解の数を当てましょう。0~9までの数字を1つ入力してください ” ) ;
- }
static void ShowMessage ( )
ShowMessage はメソッドの本体です。
static void は修飾子です。ここではこのまま記述してください。
{ }の中に命令文を記述します。
▶プログラムコード
- import java . io . * ;
- class InputRansu2 {
- public static void main ( String [ ] args ) throws IOException {
- BufferedReader br = new BufferedReader ( new InputStreamReader ( System . in ) ) ;
- int ainput ; // ainput : 入力された値
- int answer = ( int ) ( Math . random ( ) * 10 ) ; // 正解の値
- ShowMessage ( ) ; // メソッドの呼び出し
- while ( 1 > 0 ) {
- System . out . print ( ” 0~9を入力 =” ) ;
- String aString = br . readLine ( ) ;
- ainput = Integer . parseInt ( aString ) ;
- if ( ainput > 9 ) { // エラーメッセージの条件追加
- ShowMessage ( ) ; // メソッドの呼び出し
- }
- else {
- if ( ainput < answer ) {
- System . out . print ( ” 正解より小さいです “ ) ;
- } else if { ( ainput > answer ) {
- System . out . print ( ” 正解より大きいです “ ) ;
- } else {
- System . out . print ( ” 正解です!おめでとうございます! “ ) ;
- break ;
- }
- }
- }
- }
- static void ShowMessage ( ) {
- System . out . print ( ” 正解の数を当てましょう。0~9までの数字を1つ入力してください “ ) ;
- }
- }
- import java . io . * ;
- class InputRansu2 {
- public static void main ( String [ ] args ) throws IOException {
- BufferedReader br = new BufferedReader ( new InputStreamReader ( System . in ) ) ;
キーボードから繰り返し入力を受け付けるプログラムです。このまま記述してください。
- static void ShowMessage ( ) {
- System . out . print ( ” 正解の数を当てましょう。0~9までの数字を1つ入力してください “ ) ;
- }
- }
メソッドの記述です。
- int ainput ; // ainput : 入力された値
- int answer = ( int ) ( Math . random ( ) * 10 ) ; // 正解の値
- ShowMessage ( ) ;
- while ( 1 > 0 ) {
ShowMwssage ( ) ⇐ でメソッドを呼び出します。
- String aString = br . readLine ( ) ;
- ainput = Integer . parseInt ( aString ) ;
- if ( ainput > 9 ) { // エラーメッセージの条件追加
- ShowMessage ( ) ; // メソッドの呼び出し
- }
- else {
ユーザーが10以上の数字を入力した場合にメソッドを呼び出します。
10以上、以外の数値が入力された場合、以降の条件を if 文で記述します。
- } // 内側の else 文と対応
- } // 外側の else 文と対応
- } // while 文と対応
- } // main class と対応
- static void ShowMessage ( ) {
- System . out . print ( ” 正解の数を当てましょう。0~9までの数字を1つ入力してください “ ) ;
- }
- }
{ }の対応関係に注意してください。メソッドの前の }⇐はどこと対応しているのかをみてみてください。
どこからどこまでが1つのブロックで、意図した機能はどのブロック内に記述するべきなのかを気を付けなければなりません。
ブロックコードをわかりやすくするために、インデント(字下げ)を利用しても良いかもしれません。
実行結果
正解の数を当てましょう。0~9までの数字を1つ入力してください
ここまででメソッドの呼び出しになります。
0~9を入力=
ここで while 文の無限ループに入っています。
10以上の数字を入力し続けるとループからは抜けられません。
正解の値を入力した時点でループから抜けることができます。
▶数当てゲームのプログラムコード
- import java . io . * ;
- class InputRansu {
- public static void main ( String [ ] args ) throws IOException {
- BufferedReader br = new BufferedReader ( new InputStreamReader ( System . in ) ) ;
- int ainput ; // ainput : 入力された値
- int answer = ( int ) ( Math . random ( ) * 10 ) ; // 正解の値
- メソッドの呼び出し
- while ( 1 > 0 ) {
- System . out . print ( ” 0~9を入力 =” ) ;
- String aString = br . readLine ( ) ;
- ainput = Integer . parseInt ( aString ) ;
- ここにif 文を追加します(10以上の数字の入力でエラーメッセージ)
- メソッドの呼び出し
- else 文の追加
- if ( ainput < answer ) {
- System . out . print ( ” 正解より小さいです “ ) ;
- } else if { ( ainput > answer ) {
- System . out . print ( ” 正解より大きいです “ ) ;
- } else { {
- System . out . print ( ” 正解です!おめでとうございます! “ ) ;
- break ;
- }
- }
- }
- }
- ここにメソッドを記述します
- }
- }
メソッドは元のプログラムの終わりに記述します。
メソッドはプログラムの途中でいつでも呼び出すことができます。
呼び出し方はどこで呼び出しても同じ記述のしかたです。
まとめ
Java言語の醍醐味であるオブジェクト指向を理解するためには、まずメソッドの理解が必要です。メソッドを使いこなせるようになると面倒な処理をまとめて記述することが可能になります。はじめはコードの組み立て方に混乱してしまうかもしれませんが、何度もコードを記述していくことでオブジェクト指向について理解できていくと思います。