2017年11月09日

師匠のJava道場~第3回・条件判断について学ぶのじゃ!

弟子D:うむ!弟子Dだ!今月は俺が、この講座を……ぐはぁっ!!
(師匠に蹴りを受けて吹き飛ばされる)

師匠T:たわけが。お主が講座の担当など、2345年早いわ。
さて、今月は、条件判断について教えていく。準備は良いか?

弟子D:はい、師匠!

師匠T:うむ、その意気やよし。では行くとするぞ!

▽生か死か!?のif文じゃ▽

師匠T:まずは、条件判断の中でも、基本的なif文について説明していく。これはこのように書くぞ。

----------
if 式 {

}
----------

弟子D:あの、師匠。この式には何を書けば?

師匠T:うむ。a>5やb==5と言った条件式はもちろん、答えがtrueかfalseの、いわばboolean型の値が返ってくるものであれば、特に制限はない。条件式も、返ってくる答えは、trueかfalseじゃからな。(試しに、VBなどで、条件式の答えを表示させてみよ)
なので、こう書いても問題はないのじゃ。

----------
boolean sisyo;

sisyo=false;

if sisyo {

}
----------

師匠T:一般的にif文というと、条件式とセットにして使うものと思われているが、条件式以外の式も書けるというのは、覚えておくと便利なこともあろう。

弟子D:はい、師匠!

師匠T:さて。式の内容がtrueだった場合、波かっこ({ })でくくられた部分の処理が実行されるのじゃ。

弟子D:ふむふむ。それでは、falseだったとき、違う処理をさせたい場合はどうすれば。

師匠T:そのときの方法もちゃんとあるぞ。elseを使うのじゃ。elseを使う場合は、このように書く。

----------
if 式 {
 trueのときにさせる処理
} else {
 falseのときにさせる処理
}
----------

弟子D:falseのときは、elseの後の波かっこでくくられた部分が実行されるんですね。

師匠T:うむ、その通りじゃ。さて、次は条件式について教えるぞ。

▽条件式▽

師匠T:さて、条件式とは数値とある数値を比較して、その結果を返す式のことじゃ。Javaの場合、答えはtrueかfalseのboolean型で返ってくる。

弟子D:条件式があっていればtrue、違っていればfalseで返ってくるんですよね。

師匠T:うむ、そのとおりじゃ。ちなみに、HSPでは1か0、昔のPCで使われていたBASICではたいてい-1か0で返ってくるぞ。さて、条件式の書き方は、次の通りじゃ。

-----------------------------------------------------------
変数or値or式 比較演算子 変数or値or式
例:a>5……aが5より大きければtrue(そうでなければfalse)
例:b<=5+3……bが5+3以下であればtrue(そうでなければfalse)
-----------------------------------------------------------

弟子D:比較演算子というのは、等号や不等号のことでいいんですよね?

師匠T:うむ、そのとおりじゃ。だが一つだけ気を付けることとして、等号は、=ではなく、==と書かなくてはならんのじゃ。また、例にもある通り、以上や以下を表現する場合は、>=、<=と、ノットイコール(~ではない)を表現するときには、!=と書かなくてはならん。ここには気を付けるように。

弟子D:はい。

師匠T:うむ。そしてもう一つ。条件式には、&&と||の論理演算子を使うこともできる。

弟子D:論理演算子……ですか?

師匠T:うむ。&&はAnd。つまり、左右の式の両方がtrueならtrueを返す。||はOr。左右の式のどちらかがtrueならtrueを返すものじゃ。このように使われる。

----------------------------------------------------------------
(a>5)&&(b==3)……(a>5)と(b==3)の両方の式がtrueならtrueを返す。
(c==5)||(d!=2)……(c==5)か(d!=2)のどちらかがtrueならtrueを返す。
----------------------------------------------------------------

弟子D:なるほど。

▽未来は無限!switch文じゃ!▽

師匠T:さて、話を条件判断に戻すぞ。if文の他にも、条件判断の文はある。それが、switch文じゃ。これは、BASICでのON~GOTO文や、SELECT CASE文と同じようなものじゃ。

弟子D:というと、その値によって色々と分岐させる命令、ということでしょうか?

師匠T:その通りじゃ。このswitch文はこのように書く。

----------------
switch (変数) {
case 値:

}

例:
switch (a)
case 1:
 処理A
case 2:
 処理B
}
----------------

師匠T:変数の値が、caseに書かれた値であれば、その下に書かれた処理を実行するのじゃ。例えば例であれば、変数aの値が1なら処理aを、2なら処理bを実行するのじゃ……が、ここで一つ注意する点がある。

弟子D:それは一体?

師匠T:基本的に、処理の最後にはbreak文を書くこと。これがないと、その下のcaseのところの処理まで実行してしまうのじゃ。例えば上の例ならば、aが1の場合、処理Aだけでなく、処理Bも実行してしまうのじゃ。

弟子D:むむ、ということは、いくつかの値の時の処理で同じ処理を行う場合、breakを省く手もあるわけですね?

師匠T:おぉ、よく気づいたの。その通りじゃ。例えば、1のときと2のときで同じ処理をさせたいときは、このように書けばよい。

----------
case 1:
case 2:
 処理
----------

弟子D:ふむふむ。あの師匠、もう一つ質問が。

師匠T:なんじゃな?

弟子D:例えば、1のときと、2のときと、3のときのcaseがあるとして、それ以外の数のときの処理をさせたいときはどうしたらいいんですか?

師匠T:その時は、caseではなく、defaultを使うのじゃ。defaultを入れると、どのcaseにも該当しない数のときに、そこの処理をやってくれるのじゃ。

--------------
switch (a) {
case 1:
 処理A
case 2:
 処理B
case 3:
 処理C
default:
 処理D
}
--------------

師匠T:上の例でいえば、変数aが1、2、3以外のとき、処理Dを実行するのじゃ。

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

師匠T:うむ。次回は、繰り返しの命令について説明する。予習、復習を忘れてはならぬぞ!

弟子D:はい、忘れます、師匠!

師匠T:……(黙って飛び蹴り)

※次の更新は、11月9日、師匠TのチャレンジARSゲーム!の予定です。お楽しみに!
posted by 裏編 at 07:15| 師匠のJava道場 | 更新情報をチェックする

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道場 | 更新情報をチェックする

2017年09月18日

師匠のJava道場~第1回・まずはプログラムを作ってみるのぢゃ!

▼それはやはり街角にて▼

弟子D:ししょおおおお

師匠T:たわけがっ!!(いきなり跳び蹴り

弟子D:うわぁっ。師匠、何をなさるんです。

師匠T:おぬしが次に何を言うか、ぐらいわかっておるわ。「Javaを勉強し始めたが、全然わからない」というつもりだったのじゃろう。

弟子D:うぅ、その通りです。でも、よくわかりましたね。

師匠T:わからぬとでも思ったか。仕方あるまい。このわしが、おぬしにJavaについて叩き込んでくれるわっ!!

弟子D:よ、よろしくお願いします、師匠。

▼JCPadを設定しよう!▼

師匠T:さて、では始めるとしようか。その前に、JavaSDKの用意はできておるか?できてなければ、http://www.oracle.com/technetwork/jp/java/javase/downloads/index.htmlからダウンロードできるので、ダウンロードしてインストールしておくように。

弟子D:はい、インストールしました、師匠!

師匠T:うむ。次はIDEであるが……。

弟子D:あの、師匠。IDEとはなんぞや。

師匠T:うむ。IDEとは、統合開発環境の略で、エディタとコンパイラ、デバッグ行うツールが一つにまとまったものじゃ。まぁ、それだけでプログラミングができるツールと思えば間違いはない。

弟子D:なるほど。

師匠T:さて、そのIDEじゃが、今回はJCPad for Javaを使おうと思う。シンプルながら、これだけで簡単なJavaプログラミングならできるというすぐれものじゃ。最初はこれから始めて、上達してきたら、Eclipseのような本格的なIDEに移るのがよいじゃろうな。

弟子D:はい、師匠!さっそく、ダウンロードして、解凍しておきました。

師匠T:よし、ではjcpad.exeを実行して、起動させるのじゃ。

弟子D:はい。こんなウィンドウが出ました

java01-01.JPG

師匠T:うむ。それでは、実行メニューから、設定を選ぶのじゃ。

弟子D:はい、こうなりましたよ。

java01-02.JPG

師匠T:うむ。この画面で、色々な設定を行うのじゃ。まずは、コンパイラのパスのところの、参照と書かれたボタンを押すのじゃ。

弟子D:ファイルを選ぶウィンドウが開きました、師匠。

師匠T:うむ。ならば、Java SDKをインストールしたフォルダに行き、そこのjavac.exeを選ぶのだ。

弟子D:はい、できました。

師匠T:あとは、標準のデータフォルダの項目を設定して、OKを押せば、準備は完了じゃ!

弟子D:おぉ!いよいよプログラミングですね!

▼最初のプログラムだ!▼

師匠T:ではさっそく、プログラムを撃ちこんでみるとしようぞ。

弟子D:あの、師匠。「うちこむ」の字が違ってます。

師匠T:気にするな。次のプログラムを入力するがよい。

------------------------------------------------------------
class dojyo0101 {
  public static void main(String args[]) {
    System.out.println("はじめてのプログラムじゃ!");
  }
}
------------------------------------------------------------

弟子D:かたかた……できました。

師匠T:うむ、それではさっそく実行……の前に保存しておかなくてはならぬ。メニューの下にフロッピーディスクのアイコンがあるじゃろう。それを押すのじゃ。

java01-03.JPG

弟子D:はい。保存のウィンドウが出ましたが。

師匠T:ここで問題が一つ。ファイル名は、classの後の名前と同じ名前にするのじゃ。今回の場合ではdojyo0101じゃな。そして拡張子はjavaじゃ。これは大切なポイントだから忘れないように。

弟子D:わかりました。dojyo0101.javaの名前で保存しておきましたよ。

師匠T:うむ。ではさっそく実行するとしようぞ。メニューの下に、テープレコーダーの再生ボタンのようなアイコンがあるな。それを押すのだ。

java01-04.JPG

弟子D:あっ!ウィンドウが出て、はじめてのプログラムじゃ!と表示されましたよ!

java01-06.JPG

師匠T:うまくいったようじゃな。さて、ではこのプログラムについて説明するとするぞ。

弟子D:はい、師匠!

▼クラスと波かっこじゃ!▼

師匠T:今回のポイントは、次の三つじゃ。

・クラス
・波かっこ
・main
・メソッド

師匠T:まずは、クラスからじゃ。ここに注目せよ。

---------------------------
class dojyo0101 {
---------------------------

弟子D:まさにクラスですね。クラスというのは、プログラムのことですか?

師匠T:正確に言うと違うのだが、現時点ではそう思っておけばよいじゃろう。そして、クラスを宣言するときには、このように

---------------------------
class クラス名
---------------------------

師匠T:と書くのじゃ。そして二番目の波かっこじゃ。Javaの世界では、クラスの始まりと終わり、メソッドの始まりと終わりは波かっこでくくるのが決まりじゃ。見てみるがよい。先ほどのプログラムにも、{と}が一組ずつあるじゃろ?

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

師匠T:このように、クラスやメソッドの始まりは、名前の後に{ではじめ、終わりは}でくくる。これも大切なところじゃ。覚えておくように。

弟子D:はい、師匠!

▼mainメソッド▼

師匠T:さて、次はmainメソッドについてじゃ。この行に注目せよ。

-----------------------------------------
public static void main(String args[]) {
-----------------------------------------

師匠T:Javaのプログラムが実行されると、まずこのメソッドの中に書いてあるプログラムが実行されるのじゃ。

弟子D:ふむふむ。この中の、publicとかstaticとかvoidとかいうのは?

師匠T:それは、このメソッドの色々な属性を表したものじゃが、それは話す時が来た時に教えるとしよう。とりあえず今は、mainメソッドはこう書くのだということを覚えておくがよい。

弟子D:はい。

師匠T:そして、このメソッドでも始まりと終わりは波かっこでくくるのを忘れないように。

▼メソッドについて▼

師匠T:そして最後はメソッドじゃ。ここに注目せよ。

--------------------------------------------------
System.out.println("はじめてのプログラムじゃ!");
--------------------------------------------------

弟子D:メッセージを表示しているところですね。

師匠T:うむ。そしてこの行のprintln、これがメソッドじゃ。

弟子D:ふむ。それでここまでメソッドメソッドと言ってましたが、メソッドとはいかに?

師匠T:うむ。メソッドとは、プログラム中のモノに備えられた命令のようなものじゃ。他のプログラミング言語でいうところの、サブルーチン、関数といったものじゃな。

弟子D:なるほど。つまり上の行は、「System.outのprintlnメソッドを実行しろ」という意味なんですね。

師匠T:うむ、その通りじゃ。さすがは我が弟子。

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

師匠T:調子にのるでない。さて、今回はここまで。次回は、変数について説明するぞ。
posted by 裏編 at 09:18| 師匠のJava道場 | 更新情報をチェックする