関数(メソッド) つづき |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
追加したコードを
上から順番に見ていこう。
解説図も一緒に見てね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
説明は、いきなり
2回目のループの
解答処理モードから
始まってるんだね。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
今回は、
正解処理の
関数化の
部分のみ見るよ。 |
|
|
|
他は
変わってない
からね。 |
|
|
|
|
|
コードの解説図(画像をクリックで拡大表示します) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
今回のコードは、クイズが
正解だった場合の処理を
分離して関数化したものだ。
たった数行の処理ね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
関数を使えば
何回もswitch文の中で
書いてたのが
1箇所にできるんだね。
これで処理を変更・追加
する場合も1箇所で済むんだ。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
すっきり
するね! |
|
|
|
|
|
|
|
クイズゲーム完成 正解処理関数化
(KotoQuizTestのKNMain.java)179行目~ |
|
・・・ |
|
|
|
179 |
|
//関数:正解処理関数 |
|
180 |
|
private
static int printCorrect(int
seikaiGoukei){ |
|
181 |
|
|
|
182 |
|
System.out.println("やったね!正解"); |
|
183 |
|
seikaiGoukei
+= 1;//正解数加算 |
|
184 |
|
|
|
185 |
|
//結果を返す |
|
186 |
|
return
seikaiGoukei; |
|
187 |
|
} |
|
・・・ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
まず、メイン関数から
作った関数 printCorrectを
呼び出してるよ。
引数にはcorrectTotalを
指定して、現在の正解数を
コピーして渡してる。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch文の中の
正解処理を
全部、関数を呼び出す
ように変更したんだ。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
関数の
呼出が3つに
なったんだ。 |
|
|
|
|
|
|
|
クイズゲーム完成 正解処理関数化
(KotoQuizTestのKNMain.java)93行目~ |
|
・・・ |
|
|
|
093 |
|
//解答をチェックする |
|
094 |
|
switch(nowQuizNum){ |
|
095 |
|
case
0: |
|
096 |
|
//正解番号チェック |
|
097 |
|
if(inputNum
== 3){ |
|
098 |
|
correctTotal
= printCorrect(correctTotal);//正解処理 |
|
099 |
|
}else{ |
|
100 |
|
System.out.println("残念!不正解"); |
|
101 |
|
} |
|
102 |
|
|
|
103 |
|
break; |
|
104 |
|
case
1: |
|
105 |
|
//正解番号チェック |
|
106 |
|
if(inputNum
== 1){ |
|
107 |
|
correctTotal
= printCorrect(correctTotal);//正解処理 |
|
108 |
|
}else{ |
|
109 |
|
System.out.println("残念!不正解"); |
|
110 |
|
} |
|
111 |
|
|
|
112 |
|
break; |
|
113 |
|
case
2: |
|
114 |
|
//正解番号チェック |
|
115 |
|
if(inputNum
== 3){ |
|
116 |
|
correctTotal
= printCorrect(correctTotal);//正解処理 |
|
117 |
|
}else{ |
|
118 |
|
System.out.println("残念!不正解"); |
|
119 |
|
} |
|
120 |
|
|
|
121 |
|
break; |
|
122 |
|
} |
|
・・・ |
|
|
|
|
解説図 番号1を参照して下さい |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
呼び出した時点で、処理が
正解処理関数側に移る。
呼び出し側は
呼び出した場所で待機して
関数の処理が
終わるのを待つよ。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ここで待って・・・
戻ってくる値を受け取るんだ。
関数の前に
変数 correctTotalを書いて
正解が加算された戻り値を
受け取ってるんだね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
値を受け取って
おしまい。 |
|
|
|
|
|
|
|
|
|
クイズゲーム完成 正解処理関数化
(KotoQuizTestのKNMain.java)98行目~ |
|
・・・ |
|
|
|
098 |
|
correctTotal
= printCorrect(correctTotal);//正解処理 |
|
・・・ |
|
|
|
|
戻り値を受け取っている |
|
解説図 番号1を参照して下さい |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
次に関数の定義を
見てみよう。
戻り値には
int型を指定してる。
戻り値で
正解数のカウントを
加算した後の値を
戻してやるからね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
引数には
正解数の加算前の値を
受け取ってるんだよね。
引数の名前は
日本語ローマ字なんだね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
あたし
こっちの方が
分かりやすい! |
|
|
|
|
|
|
|
クイズゲーム完成 正解処理関数化
(KotoQuizTestのKNMain.java)179行目~ |
|
・・・ |
|
|
|
179 |
|
//関数:正解処理関数 |
|
180 |
|
private
static int printCorrect(int
seikaiGoukei){ |
|
181 |
|
|
|
182 |
|
System.out.println("やったね!正解"); |
|
183 |
|
seikaiGoukei
+= 1;//正解数加算 |
|
184 |
|
|
|
185 |
|
//結果を返す |
|
186 |
|
return
seikaiGoukei; |
|
187 |
|
} |
|
・・・ |
|
|
|
|
解説図 番号2を参照して下さい |
|
|
|
|
|
|
|
たった
数行だけどね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
正解処理関数の内容は
元のコードと同じ。
正解メッセージの表示と
正解数の加算処理ね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
メイン関数では
correctTotalだったのを
引数seikaiGoukeiに
変えたんだね。
違う名前の変数に
値を渡すんだ。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
うーん
同じ値だよね・・・ |
|
|
|
|
|
|
|
|
|
<元のコード>
クイズゲーム 完成(モード別処理)
(KotoQuizTestのKQMain.java)102行目~ |
・・・ |
|
|
|
102 |
|
System.out.println("やったね!正解"); |
|
103 |
|
correctTotal
+= 1;//正解数加算 |
|
・・・ |
|
|
|
|
|
|
<現在のコード>
クイズゲーム完成 正解処理関数化
(KotoQuizTestのKNMain.java)179行目~ |
・・・ |
|
|
|
179 |
|
//関数:正解処理関数 |
|
180 |
|
private
static int printCorrect(int
seikaiGoukei){ |
|
181 |
|
|
|
182 |
|
System.out.println("やったね!正解"); |
|
183 |
|
seikaiGoukei
+= 1;//正解数加算 |
|
184 |
|
|
|
185 |
|
//結果を返す |
|
186 |
|
return
seikaiGoukei; |
|
・・・ |
|
|
|
|
|
処理の内容は同じ。 |
元のコードの変数名を関数の引数名に変更した。 |
|
|
|
|
|
|
|
なんで? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
あれ?
何でseikaiGoukeiに変えたの?
関数が違うから同じ名前の変数
作れるよね?
引数名をcorrectTotalにすれば・・・
printCorrect関数にもメイン関数と
全く同じ名前の変数ができるから
コードをコピーして貼り付けても
書き換えないで済んだよ。
戻り値も全部統一できるよ。
引数は、呼び出し元の変数と
同じ名前の方が良かった
んじゃないのかな? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
呼出元関数の変数名と引数名を同じにした例
|
呼出側の関数内 |
・・・ |
|
|
|
098 |
|
correctTotal
= printCorrect(correctTotal);//正解処理 |
|
・・・ |
|
|
|
|
|
|
定義側の関数内 |
・・・ |
|
|
|
179 |
|
//関数:正解処理関数 |
|
180 |
|
private
static int printCorrect(int
correctTotal){ |
|
181 |
|
|
|
182 |
|
System.out.println("やったね!正解"); |
|
183 |
|
correctTotal
+= 1;//正解数加算 |
|
184 |
|
|
|
185 |
|
//結果を返す |
|
186 |
|
return
correctTotal; |
|
187 |
|
} |
|
・・・ |
|
|
|
|
|
関数が違うので同じ名前の引数を作ることができる。
メイン関数側の変数名と引数名を同じにした場合は
移植するコードの変更をしないで済む。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
そうだね。
同じ名前にもできるよ。
でも、セッションでは
基本的に変えるよ。
・説明が紛らわしくなる。
・関数の分離性の点から。
(関数はメイン関数以外にも
いろいろなコードから
呼ばれる可能性がある。)
etc・・・
今回は、関数の引数には
関数と元のコードを区別する意味で
日本語ローマ字を使ったよ。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
説明したくないとこ
よく気付くなあ。
ここら辺は
分かりやすさと
作りやすさで
柔軟にいこう。
今は軽く流して。。。 |
|
|
|
|
うーん |
今回は
作ってある処理を
関数に切り出してる
からね。
これからは最初から
関数で作るから
気にならなくなると
思うけど。
クラスもやるし。
最初だけじゃね? |
|
|
|
そうなんだ。
全くわかんない
けど。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
で、最後。
加算した正解数の値を
return文で
呼び出し元に戻して
関数終了。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
戻してあげるように
作らないと、
正解数の値は
ここで消えちゃうんだね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
加算した結果を
返してあげような。 |
|
|
|
関数も
対話に
なってるね。 |
|
|
|
|
|
|
|
クイズゲーム完成 正解処理関数化
(KotoQuizTestのKNMain.java)179行目~ |
|
・・・ |
|
|
|
179 |
|
//関数:正解処理関数 |
|
180 |
|
private
static int printCorrect(int
seikaiGoukei){ |
|
181 |
|
|
|
182 |
|
System.out.println("やったね!正解"); |
|
183 |
|
seikaiGoukei
+= 1;//正解数加算 |
|
184 |
|
|
|
185 |
|
//結果を返す |
|
186 |
|
return
seikaiGoukei; |
|
187 |
|
} |
|
・・・ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
今回はたった数行の処理を
整理しただけだけどね。
処理が大きくなればなるほど
関数にした時、差が出るよ。
関数の流れはなんとなく
見えたんじゃない?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
はいっ、分かりました!
なんとなく
見えた気がする。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
今は
なんとなく
でいいよ。
繰り返し
やるからね。 |
|
|
|
復習するね! |
|
|