2017年10月09日

師匠のJava道場~第2回・変数とメソッドについて学ぶのじゃ!

師匠T:……。

弟子D:どうしましたか、師匠?なんか、渋い顔をしていますが。

師匠T:いや、先日、散歩していたらカップルが仲良くな……いやなんでもない。(べきっ

弟子D:(握っていた胡桃が……。師匠の悲しみと怒りが、言葉なく伝わってくる……)

師匠T:それでは今回は、変数とメソッドについて説明する。覚悟はよいか?

弟子D:は、はい……。

▼Javaに二つの変数あり!すなわち、ローカルとクラス!▼

師匠T:いきなりじゃが、変数には大きく分けて二つの種類があるのじゃ。

弟子D:二つ……ですか?

師匠T:うむ。ローカル変数とクラス変数の二つじゃ。

弟子D:クラス変数のクラスとは、前回ちらっと触れたクラスのことですよね?

師匠T:うむ、よく覚えておったの。そのクラスじゃ。そしてローカル変数のローカルとは『局所』という意味じゃ。まずは、このローカル変数から説明していくぞ。

弟子D:は、はい、師匠!

師匠T:ローカル変数とは、宣言されたメソッドでのみ使うことのできる変数のこと。メソッドの中で宣言すると、その変数はローカル変数となるのじゃ。

弟子D:ふむふむ。

師匠T:このローカル変数で気を付けるべきことは二つ。まず一つは、あるクラスの中に、このローカル変数と、それと同名のクラス変数があると、ローカル変数のほうを優先して参照する、ということじゃ。

弟子D:なるほど。そして今一つは。

師匠T:うむ。二つ目は、そのメソッドを出ると、そのローカル変数は初期化される、ということじゃ。

弟子D:なるほど、わかりました、師匠。

師匠T:そして次はクラス変数じゃ。あるクラス内で、メソッドの外で宣言すると、その変数はクラス変数となる。このクラス変数は、クラスの中であればどこでも使えるのじゃ。

弟子D:おぉっ。

師匠T:それだけではないぞ。クラス変数の内容は、ある例外を除き、初期化されることがないのじゃ。

弟子D:おぉ、それはとても便利ですね!

師匠T:うむ。じゃが、便利だからと言って、クラス変数を乱用することは推奨できぬ。一つのクラス変数を複数のメソッドで使いまわしていたら、混乱してしまうからの。

弟子D:確かに……。ローカル変数とうまく使い分けるのが肝要、ってことですね。

師匠T:そういうことじゃ。おぬしも成長したのう。

弟子D:俺だってこのくらい朝飯……いてっ。

師匠T:調子にのるでない。次は変数の型について説明するぞ。

▼変数の宣言と変数の型!▼

師匠T:さて、次は変数の宣言についてじゃ。基本的には変数を宣言するときは次のように書く。
-----
変数の型 変数名;
-----

師匠T:例えば、int型の変数sisyoを宣言するなら、このように書くのじゃ。
-----
int sisyo;
-----

弟子D:なるほど。変数の型の一つにintがあるのはわかりましたが、他にどのような型があるのですか?

師匠T:おぉ、それを忘れておったのう。まずint型じゃが、これは符号付きの整数を扱う型じゃ。これの上位存在の型としてlongというものもある。long型はint型より桁数の多い数を扱うことができるのじゃ。

弟子D:ふむふむ。

師匠T:float型、double型というものもある。これは小数を扱える型じゃ。double型はfloat型よりも桁数の多い小数を扱うことができるぞ。

弟子D:なるほど。

師匠T:char型。これは、符号がつかない(つまり正の数ということじゃな)数を扱う型。そして最後、boolean型。これは、true(はい)かfalse(いいえ)の二つの値を扱う型なのじゃ。

弟子D:ふむふむ……あれ?師匠。これまで説明された型の中に、文字列を扱うものがありませんが。ははーん、さては師匠、もうボケ……いてっ。

師匠T:たわけが。このわしがボケることなどありえぬわ。実は、文字列は特別で、変数では扱えないのじゃ。

弟子D:えええええ!?それではどうすれば?

師匠T:安心せい。ちゃんと扱う方法はある。それは後の講座で説明するので、楽しみにしているがよい。

弟子D:はい、わかりました、師匠!

師匠T:変数の使い方は、他のプログラミング言語と同じじゃ。覚えておるな?

弟子D:はい、このように書けばいいんですよね。

-----
変数=値or変数or式
例:
a=3→変数aに3を入れる
b=c→変数bに変数cの内容を入れる
d=e+2→変数dに、変数eの値に2を足した結果を入れる
-----

師匠T:うむ、その通りじゃ。

▼メソッド!▼

師匠T:ではいよいよメソッドについてじゃ。メソッドについては、前回の講座で軽く説明したの。覚えておるか?

弟子D:はい。プログラム中のあるモノに備えられた命令のようなもので、他のプログラミング言語での、サブルーチンや関数のようなもの、なんですよね。

師匠T:うむ、その通りじゃ。そのメソッドじゃが、次のように書いていく。
-----
型 メソッド名(引数) {

}
-----

弟子D:型とは、変数の型と同じものでしょうか?

師匠T:うむ、そのとおりじゃ。メソッドは、呼び出し元に戻り値なるものを返すことができるのじゃが、その戻り値がどのような型の値かを、ここで宣言するのじゃ。例えば、int型の戻り値を返すメソッド・deshiを宣言するときは、このように書く。

-----
int deshi(){
-----

師匠T:また、何も戻り値を返さないメソッドの場合は、voidを指定するのじゃ。

弟子D:ふむふむ。

師匠T:次は引数じゃな。引数とは、呼び出し元からメソッドに渡される値のことじゃ。引数を指定してメソッドを呼び出すと、引数はここで宣言された変数の中に入るのじゃ。

弟子D:ふむふむ。それで引数の宣言はどのようにすれば?

師匠T:難しいことはない。変数の宣言と同じじゃ。例えば、float型の引数を受け取り、int型の戻り値を返すメソッドabcを宣言する場合は、このように書く。
-----
int abc(float a) {
-----

師匠T:また、引数が複数ある場合、引数の宣言の間をコンマで区切る。

-----
int def(int a, int b) {
-----

弟子D:なるほど、わかりました。師匠!それで、戻り値を返すにはどうすれば。

師匠T:うむ。そのためにはreturnを使う。returnはこのように使うぞ。

-----
return 変数or値or式;
例:
return a;→変数aの内容を返す
return 5;→5を返す
return b+3;→変数bの内容に3を足した値を返す
-----

弟子D:なるほど。それで、メソッドを使うにはどうすれば?

師匠T:うむ。二つの方法があるぞ。まず、戻り値を受け取らない場合。その場合は、このように書けばよい。
-----
メソッド名(引数);
例:
method1();
method2(a);
method3(a,2);
-----

師匠T:一つ目の例のように、引数を渡さない場合は、()内には何も書かなくてもよい。また、引数を渡すときには、渡す引数の型が、メソッドの宣言のものと同じになるようにしなければならぬ。違うと例外(エラーのようなものぢゃ)が起こる場合もあるので気を付けるがよい。
-----

int method4(int a, float b) {

method4(5, 0.3);

×
int method4(int a, float b) {

method4(0.2, 1);
-----

師匠T:そして二つ目の例じゃ。戻り値を変数に格納したい場合は、このように書くのだ。
-----
変数名=メソッド名(引数);
例:
a=method5(3);
-----

弟子D:ふむふむ。わかりました、師匠!

師匠T:うむ。さて、メソッドについての話はまだ続くのじゃ。

▼オーバーロードオオォォォ!!▼

師匠T:例えば、割引セールのことを考えてみよう。ほとんどの商品は5割引だが、特定の商品だけは3割引とか1割引だったりした場合、それを計算するメソッドを作る場合はどうする?

弟子D:うーん。各割引ごとにメソッドを作りますかねぇ……。

師匠T:それも一つの方法じゃな。でもそうすると、商品ごとに違うメソッドを指定しなくてはいけなくて、少々面倒じゃな。

弟子D:あ、それもそうですね。

師匠T:そこで出てくるのが、これから説明するオーバーロードなのじゃ。このオーバーロードとは、引数の数や型の違う、同名のメソッドを2つ以上定義することじゃ。

弟子D:???

師匠T:例えば、先ほどの例でいえば、値段だけ引数として渡すmethod1と、値段と値引き率を渡すmethod1とを同時に書ける、ということじゃ。そうすれば、どの処理をするにしても、method1だけで済むじゃろ?

弟子D:おぉっ、確かにっ。

師匠T:プログラムとして示すと、こんな感じじゃな。
-----
int method1(int nedan) {
return nedan*5/100;
}

int method1(int nedan, int ritsu) {
return nedan*ritsu/100;
}
-----

師匠T:なお、このオーバーロードのように、一つのメソッドが、状況に応じて違う処理をすることを、『多様性(ポリモーフィズム)』という。Javaの雑学として覚えておくがよい。

弟子D:はい、師匠!

師匠T:うむ。次回は、条件判断について説明する。予習、復習を欠かさぬようにな。

※次の更新は、10月12日、『師匠Tのチャレンジ!ARSゲーム』です。お楽しみに!
posted by 裏編 at 16:20| 師匠のJava道場 | 更新情報をチェックする