この質問は 2 世代前のものです。しかし、この質問は私も悩まされていたので、答えます。
ここにあなたが見ているものがあります: Syntax AとSyntax B .
何を確認する必要がありますか:コード全体の構文の一貫性。
1 つのスタイルを選択し、それに固執します。これは、個人の選択、チームの選択、上司の選択などによって決定されます。ボトルネックが発生するまでパフォーマンスを気にすることは、馬よりもカートを置いていることです。
コードと複雑さの蓄積の一般的な結果として、switch ステートメントに直面した場合、誰かがどこかに悪いコードを書き、コードの 1 つのヤーン ボールで多くのことを処理しようとしました。
適切な例: 配列内の 5 つの異なる値を返す JSON を返す API 呼び出しで、それをどのように処理するか、または必要に応じてどのデータを選択するかを理解する必要があります。
ほとんどの場合、複数の return または if が発生する可能性がある場合は、すぐにコードを小さなチャンクに分割する必要があります。
たとえば、Jon Skeet のコードを見てみましょう。
public int DoSomething(string input1, string input2)
{
int ret;
// First simple case
if (input1 == null || input2 == null)
{
ret = -1;
}
else
{
// Second simple case
int totalLength = input1.Length + input2.Length;
if (totalLength < 10)
{
ret = totalLength;
}
else
{
// Imagine lots of lines here, using input1, input2 and totalLength
// ...
ret = someComplicatedResult;
}
}
return ret;
}
まず、コードをもう少し読みやすくできるかどうか見てみましょう。
private int someComplicatedTask(string input1, string input2){
// Second simple case
int ret = 0;
int totalLength = input1.Length + input2.Length;
if (totalLength < 10)
{
ret = totalLength;
}
else
{
// Imagine lots of lines here, using input1, input2 and totalLength
// ...
ret = someComplicatedResult;
}
return ret;
}
public int DoSomething(string input1, string input2)
{
return input1 == null || input2 == null ? -1 : someComplecatedTask(...);
}
これは、「入力が null になる可能性があるのに、なぜ DoSomething を呼び出したのか?」と疑問に思うはずです。
問題がまだ解決されていないことに注意してください。私が達成したのは、コードの見栄えを良くすることだけです。
if 条件に関しては、次のように対処します。
null 入力の条件は、サニタイズ機能に移動されます。または、入力が null でない場合にのみ呼び出しが行われます。
...
if(input1 != null && input2 != null){
output = DoSomething(input1, input2);
}
...
public int DoSomething(string input1, string input2)
{
int len = input1.Length + input2.Length;
return len < 10 ? len : someComplecatedTask(input1, input2);
}
private int someComplicatedTask(string input1, string input2){
// Imagine lots of lines here, using input1, input2
// ...
return someComplicatedResult;
}
そのため、コードはより扱いやすくなりました。コードが歩ける経路は 2 つしかなく、すべて問題ありません。
それでは、最初のコード スニペットを見てみましょう。
public double xMax {
get {
double val = 0.00f;
switch(x_option) {
case 0:
val = priMax;
break;
case 1:
val = rfMax;
break;
case 2:
val = pwMax;
break;
}
return val;
}
}
私の考えでは、これは 2 つの理由で悪いこと
です。
2. Get {} は簡単です。セット {} には、適切な値を設定するための条件が含まれている必要があります。
したがって、コードは次のようになります。
public double xMax {
set {
double val = 0.00f;
switch(value) {
case 0:
val = priMax;
break;
case 1:
val = rfMax;
break;
case 2:
val = pwMax;
break;
}
xmax = value * val; // say // This makes break better in switch.
}
get { return xmax; }
}
ケースから抜け出した後、さらにいくつかの(すべてのケースに共通の)操作を実行できるため、これは戻るよりも優れています。get one に関するこの例は、設定中に値がわからないため、決定木が必要になるため、より優れています。
しかし、取得中、オブジェクトは内容を正確に認識し、要求された内容を喜んで返します。
さて、あなたの 2 番目のコード例はまったく意味をなさないはずです。何を返すかを決めるのは、オブジェクトの義務ではありません。持っているものを返す必要があります。
また、設定中はとにかく無理に戻してはいけません。
学ぶべきことがたくさん残っているので、これでいくつかの疑問が解消され、さらにいくつかの疑問が生じることを願っています。