私はクラスのコーディングの割り当てを完了し、ネストされたIFSは、switchステートメントとしてかなり良く見えるかもしれないことを友人からのフィードバックを与えられました
私は、スイッチに変換しようとしたが、同じでない場合より仕事についてのようです。
//this is the absolute basic frame of the code created
if(arg){
//code
if(arg){
//code
if(arg){
//code
}
else if(arg){
//code
}
}
else if(arg){
//code
}
else if(arg){
//code
}
それが容易になり、より良い、それがswitch文に変換された場合には見たり悪くない混乱場合、それは同じだろうか?
EDIT:ghostcatのために、これは私が質問のために簡略化するコードの完全なセクションです
while(loop == true){
System.out.print("Do you have more students to enter (Y for yes, N for no): ");
yn = input.nextLine();
if(yn.equals("Y") || yn.equals("y")) {
System.out.print("Undergraduate or Graduate? (U for undergraduate, G for graduate): ");
ug = input.nextLine();
if(ug.equals("U") || ug.equals("u")) {
System.out.print("Student name: ");
NAME = input.nextLine();
System.out.print("Student ID: ");
ID = input.nextInt();
System.out.print("Student GPA: ");
GPA = input.nextFloat();
System.out.print("Is student a transfer student? (Y for yes, N for no): ");
input.nextLine();
transfer = input.nextLine();
if(transfer.equals("Y") || transfer.equals("y")) {
ts = true;
students.add(new UndergradStudent(NAME, ID, GPA, ts));
}
else if(transfer.equals("N") || transfer.equals("n")) {
ts = false;
students.add(new UndergradStudent(NAME, ID, GPA, ts));
}
}
else if(ug.equals("G") || ug.equals("g")) {
System.out.print("Student name: ");
NAME = input.nextLine();
System.out.print("Student ID: ");
ID = input.nextInt();
System.out.print("Student GPA: ");
GPA = input.nextFloat();
System.out.print("What college did the student graduate from: ");
input.nextLine();
college = input.nextLine();
students.add(new GradStudent(NAME, ID, GPA, college));
}
}
else if(yn.equals("N") || yn.equals("n")) {
loop = false;
}
}
よりクリーンなコード視点、両方のオプション(IF / ELSEまたはスイッチ)は好ましくない。しかし、より多くのコンテキストなしでそれを解決することはできません。
まず第一に、本当の問題はあなたの例のコードの周りに座っているあなたの方法は非常に多くのパラメータを見て持っているということです。
関数の引数の理想的な数はゼロ(niladic)です。次は、1(モナド)は、(二項)2により密接に続いています。三つの引数(三者)は、可能な限り避けるべきです。以上の3(polyadic)は非常に特別な正当化、およびその後、とにかく使用すべきではありませんが必要です。
言い換えれば、あなたは、可能な限り少ない引数として持つメソッドを書くために努力しています。各引数は、潜在的なので追加などAN場合やスイッチコントラストの必要性を。
いくつかのswitch文は、あなたのために働くだろうというとき、1つの潜在的なパスが多型に入れている可能性があります。OOPに切り替えるの「正しい」方法は、実際に実行時に呼び出されるどの方法を決定するために異なるクラス、および使用ランタイム多型を持つことです。
追加のコンテキストを考えます:
ug = input.nextLine();
if(ug.equals("U") || ug.equals("u")) {
...
クリーンなコードソリューションは次のように行くことができます:
ug = input.nextLine();
if (ug.equalsIgnoreCase("u")) {
fetchValuesForUndergraduate();
}
それだ!あなたの現在のコードとあなたの本当の問題は、それが一つの場所でたくさんのことをしていることです。それに「クリーンなコード」ソリューションは、することです移動素敵な占い名を持つ個別のヘルパーメソッドへのコードを、そのはるかに少ないん。