Java入門season3~メソッドとクラス~
やっほー。Java始めて実質3時間目くらいになりました。
今回はメソッドとクラスの話をさっくりまとめておきます。言語化しておかないと忘れるからね。
メソッドとかクラスとかいうと急にオブジェクト指向感出てきます。最初の難関というところか。
★そもそもメソッドって?
複数ある処理を分割したうちの1ブロックといった感じです。C++でいうと関数みたいな感じ…?(中の人も完全にはわかっていないので感覚的に書いてます)
メソッドはクラスの中で定義しないといけません。そして、呼び出す位置より下側でします。これまで書いてきたC++と一番異なる点はそこです。C++ではこれまで、関数の定義→関数の呼び出しとしてきましたし、定義はmain()の外でしました。
ところがJavaでは、少なくとも現時点では、main内で、呼び出し→定義の順で書かれます。
**画像は消去しました(2018/08/29)**
確かにメソッドの呼び出しの方が先に来ています。そしてメソッドの定義はmain内、つまりクラス内で行われています。引数の書き方はC++と同じですね。
当然複数の引数を渡すことも可能です。ただし、異なる型の引数で呼び出す出す際には実引数と仮引数は順番が同じでなければエラーになります。
ここまでは定義したメソッドが何らかの出力をしてくれるものでした。しかし、いつでも呼び出したメソッドに出力をしてほしいわけではありません。単に何らかの処理をしてその結果を別の処理に使うために渡してほしい場合もあります。
そんなあなたには「戻り値」です。C++やPythonにもありますが、「return」する関数です。そうです、public static voidの"void"は戻り値の型を表していたのです。
ということは、C++の関数と全く同じで、
・メソッドに出力結果まで定義する→void
・メソッド内での処理で整数型を返してほしい→int
・メソッド内での処理で文字列型を返してほしい→String
となるわけです。実にシンプル。これで様々なメソッドを定義して色々と処理できるようになりました。コードの可読性もグッと良くなります。
次にメソッドのオーバーロードに関してまとめます。
基本的に同名のメソッドは定義できません。どれを呼び出すのかコンパイル時に判断できないからです。しかし、仮引数の型が異なるだとか仮引数の数が異なるなどの違いがあれば判断できますので、同名であってもメソッドの定義は可能です。このことをオーバーロードといいます。これで同じようなことをしたいときのメソッドの定義時に名前を考える手間が省けますね(もっとも、区別しやすい名前を付けるにこしたことはありませんが)。
メソッドを組み合わせて使う際、つまり、あるメソッド(★)をmain以外の違うメソッド(☆)内で使いたいとき、
・呼び出したいメソッド(★)を定義
・組み合わせたいメソッド(☆)の中で呼び出す;この際に引数の型を改めて書く必要はない。書くとコンパイル時に引っかかる。
例えば、int型の戻り値を返すメソッド(★)を定義し、別のメソッド(☆)内でその戻り値を使いたいとします。メソッド(★)の戻り値をメソッド(☆)で利用するためには、メソッド(☆)内でメソッド(★)を呼び出さなければなりません。呼び出す時に渡す仮引数には型の定義は不要ということです。メソッド(★)の定義時で仮引数の型は宣言されていますので、改めて宣言する必要はありません(コードを上から順に読むとメソッド(☆)が先に来るので、その中にあるメソッド(★)の仮引数を見て型がないことに違和感を覚えるかもしれません)。
まあこんな感じで。いい感じじゃない?
次回は真偽値の戻り値についてまとめます。