2014年01月17日
JavaEEの前に復習をしてみる その9 メソッドを分けてみる。
JavaEEの前に復習をしてみる その6で、Shadeがスイッチ文で行動を分岐しました。
それを一つのメソッドの中に処理を全部書くと、とても見づらいですし、
1つの処理を直すために、全部の処理を書き直す。なんてことになります。
なので、まず、メソッドを分けることについて考えます。
今までだと、1つのクラスの中に、1つのメソッドでしたが、
1つのクラスに4つのメソッドを入れてみます。
mainメソッドと、attackメソッドと、defenceメソッドと、recoveryメソッドです。
package test;
public class Renshu3{
String job = "勇者" ;
static String name = "Shade" ;
static int hitpoint = 10;
static int maxHitpoint = 20;
int at = 5;
static int df = 5;
public static void main (String [] args){
System. out .println( "1.攻撃 / 2.防御 /3.回復" );
int select = new java.util.Scanner(System. in ).nextInt();
switch (select){
case 1:attack( "ゴブリン" );
break ;
case 2:defence();
break ;
case 3:recovery();
default :System.out .println ("なにもしなかった。" );
}
}
public static void attack(String enemyName){
System. out .println(enemyName+ "に攻撃!" );
}
public static void defence(){
System. out .println( name +"は身を守っている。" );
df = df * 2;
}
public static void recovery(){
System. out .println( name +"は、けがの治療に専念した。" );
hitpoint = maxHitpoint ;
}
}
その6ではケースごとに、コンソールへ結果を出力していましたが。
ケースごとに、メソッドを呼び出すことによって、そのメソッドの内部のコードを処理させています。
それぞれ役割が別れているため、コードも見やすいですし、対象メソッドの中身だけ修正すれば、
mainメソッドの中身は変える必要がないのです。
また、
case 1:attack( "ゴブリン" );
メソッドを実行させる際に、値を持たせることができます。
public static void attack(String enemyName){
System. out .println(enemyName+ "に攻撃!" );
メソッド側で、その値を受け取って処理を継続させることもできます。
結果は、下記のように。
1.攻撃 / 2.防御 /3.回復
1
ゴブリンに攻撃!
ここまでの知識で、ある程度のプログラムは組めるような気がしてきますが、
このプログラムはJavaらしさ0です。上司にこのプログラムを見せて、プラグラミングやらせてください!
とか言ったら、お前はインフラにずっといるがよい。フハハハハ!!という魔王並みの発言をされますね。(※ そんな上司はいません)
正直、オブジェクト指向は、あまり得意ではありません。復習と同時に得意にならねばならないな・・・。
それを一つのメソッドの中に処理を全部書くと、とても見づらいですし、
1つの処理を直すために、全部の処理を書き直す。なんてことになります。
なので、まず、メソッドを分けることについて考えます。
今までだと、1つのクラスの中に、1つのメソッドでしたが、
1つのクラスに4つのメソッドを入れてみます。
mainメソッドと、attackメソッドと、defenceメソッドと、recoveryメソッドです。
package test;
public class Renshu3{
String job = "勇者" ;
static String name = "Shade" ;
static int hitpoint = 10;
static int maxHitpoint = 20;
int at = 5;
static int df = 5;
public static void main (String [] args){
System. out .println( "1.攻撃 / 2.防御 /3.回復" );
int select = new java.util.Scanner(System. in ).nextInt();
switch (select){
case 1:attack( "ゴブリン" );
break ;
case 2:defence();
break ;
case 3:recovery();
default :System.out .println ("なにもしなかった。" );
}
}
public static void attack(String enemyName){
System. out .println(enemyName+ "に攻撃!" );
}
public static void defence(){
System. out .println( name +"は身を守っている。" );
df = df * 2;
}
public static void recovery(){
System. out .println( name +"は、けがの治療に専念した。" );
hitpoint = maxHitpoint ;
}
}
その6ではケースごとに、コンソールへ結果を出力していましたが。
ケースごとに、メソッドを呼び出すことによって、そのメソッドの内部のコードを処理させています。
それぞれ役割が別れているため、コードも見やすいですし、対象メソッドの中身だけ修正すれば、
mainメソッドの中身は変える必要がないのです。
また、
case 1:attack( "ゴブリン" );
メソッドを実行させる際に、値を持たせることができます。
public static void attack(String enemyName){
System. out .println(enemyName+ "に攻撃!" );
メソッド側で、その値を受け取って処理を継続させることもできます。
結果は、下記のように。
1.攻撃 / 2.防御 /3.回復
1
ゴブリンに攻撃!
ここまでの知識で、ある程度のプログラムは組めるような気がしてきますが、
このプログラムはJavaらしさ0です。上司にこのプログラムを見せて、プラグラミングやらせてください!
とか言ったら、お前はインフラにずっといるがよい。フハハハハ!!という魔王並みの発言をされますね。(※ そんな上司はいません)
正直、オブジェクト指向は、あまり得意ではありません。復習と同時に得意にならねばならないな・・・。
【Javaの最新記事】
この記事へのコメント
一個前の記事、名無しでコメントしてしまいました・・・。
名無しOKになっている・・・。
メソッドは極力分けませんとね、何がなんだかわからなくなりますからね、
確かにネーミングは、センスが問われますよね。
英語ができる人とできない人でも差が出てきます。
google翻訳先生大活躍です。たまに、おかしなのでてきますがw
継承・・・この辺、一番苦手です。がっつり、おさらいしないといけませんな。
こんばんはっ Habitat ですっ
おっ すこし、オブジェクト指向っぽくなってきました。。
メソッドで細分化して助かるのはその、苗床wwのクラスで、
他のクラスと同じ名前が遠慮なく使えるところですね
そのおかげで、例に出てるようにシンプルでわかりやすい名前が振れるし。。
(結構PG組んでて困るのが、関数のネーミングだったりする)
継承使わない方針で行くんだったら、上位メソッドはごそっとコピー効くしねww