特別な状況に対処しようとすると、switchステートメントの使用に問題があります。たとえば、A、B、Cの3つのケースがあります。
if-elseステートメントを使用すると、次のようになります。
if ( not C){
do statement_3
if B
do statement 2
else if A
do statement 1
}
Switchステートメントを使用して同じことをしたい場合、問題が発生します。
switch (variable){
case A: do statement_1
case B: do statement_2
// how to do statement 3 here?
}
コードの重複を回避しようとしています。だから私はコードをできるだけ簡単にする方法を考えています。
更新1:
私のコード/質問をより明確にするために、私は自分のコードをできるだけ単純/明確にしたいので、if-elseの代わりにswitchステートメントを使用したいのはそのためです。また、switch-statementは通常if-elseよりも速いと聞きました。 (私は100%確かではありません)。
ケースA、B、Cはenum型なのでswitch-caseを使いたい。それらは可変ではありません。混乱については申し訳ありません。
各ステートメントは、10行を超えるコードです。そのため、次のことは行いたくありません。
switch (enum variable) {
case A:
statement1
statement3
break;
case B:
statement2
statement3
break;
}
どの文を実行するかを正確に定義することをお勧めします。
switch (variable){
case A:
statement_1();
statement_3();
break;
case B:
statement_2();
statement_3();
break;
}
pdate-3の場合:
これらの10行のメソッドを作成します。
public void statement_1() {
//your 10 lines of code
}
常にstatement_3を実行している場合、Cの場合を除いて、記述したif/else-blocksを使用できます。
しかし、私の正直な意見では、あなたが少数のケースを持っている場合、そのケースで何をしなければならないかを正確に定義してください。他の人にとって読みやすい
あなたはこれを行うことができます:
switch (variable){
case A: do statement_1; do statement_3; break;
case B: do statement_2; do statement_3; break;
}
スイッチをifステートメントにネストしませんか?このように、繰り返しコードはありません。
if(!C){
statement_3;
switch(variable){
case A:
statement_1;
break;
case B:
statement_2;
break;
}
または、ifステートメントとスイッチの両方を使用しますか?
if(!C){
statement_3;
}
switch(variable){
case A:
statement_1;
break;
case B:
statement_2;
break;
ここでは、このようにif statement
を使用する必要があります。switch
には通常default
値も含まれるためです。
if (letter == 'A' || letter == 'B') { System.out.println("Statement 3 ");}
switch (letter) {
case 'A':
System.out.println("Statement 1 ");
break;
case 'B':
System.out.println("Statement 2 ");
break;
case 'C':
System.out.println();
break;
default:
System.out.println("You entered wrong value");
}
ケースに2つ以上のステートメントがある場合は、それらを個別のメソッドとして抽出することをお勧めします(読みやすさとクリーンなコードの観点から)。
switch (variable){
case A: handleCaseA(); break;
case B: handleCaseB(); break;
default: handleDefaultCase(); break;
}
switch (variable) {
case A:
do statement_1;
do statement_3;
break;
case B:
do statement_2;
do statement_3;
break;
}
ブレークにより、スイッチブロック内の残りのコードすべての実行が「無視」されるため、実行時間を大幅に節約できます
public class SwitchExample {
public static void main(String[] args) {
int number=10;
switch(number){
case 10: System.out.println("10");break;
case 20: System.out.println("20");break;
case 30: System.out.println("30");break;
default:System.out.println("Not in 10, 20 or 30");
}
}
}
出力は1
enum
sを導入するとわかりやすくなることがよくあります。ここで、それぞれのenum
は多くのプロセスを通じて解決できる問題だと想像します。
enum Issue {
A {
void handleIt () {
statement_1();
statement_3();
}
},
B {
void handleIt () {
statement_2();
statement_3();
}
},
C {
void handleIt () {
// Do nothing.
}
},
D {
void handleIt () {
A.handleIt();
B.handleIt();
}
};
abstract void handleIt();
}
ここで、他の問題の解決策を使用して特定の問題を処理できるという追加の利点があることに注意してください(my D
enum
を参照)。