4

変数が2つの異なる値を持つ可能性があり、一方が何かを実行し、もう一方が異なる場合は、次のようにします。

if(myVariable == FIRST_POSSIBLE_VALUE) { ... }
else { ... }

またはあなたはしますか:

if(myVariable == FIRST_POSSIBLE_VALUE) { ... }
else if (myVariable == SECOND_POSSIBLE_VALUE) { ... }

明確にするために、読者が必ずしも同じことをしているとは言えない状況では(ただし、「不要な」表現をしている場合はそうではありません)?それで、あなたは何をしますか?ありがとう!

編集:実際には、このようなものにはもっと多くの異なるオプションがあります:三項演算子、if-else、if-elseif、if-elseif-else、-if-else(assert付き)、スイッチ。それぞれに場所がありますが、決めるのは難しいです。

4

9 に答える 9

7

変数の他の可能な状態がない場合(つまり、nullなどをチェックする場合)、私は常に他の単純なものを好みます。それが最初の条件付きでない場合、変数が何であるかを言うコメントを追加するかもしれませんが、それはそのような場合にのみです

if(color==red){
....
}else{ //our theme only allows for red and yellow, so the color must be yellow.
....
}

また、これによりプロセッサの時間が節約され、無駄な変数をチェックする必要がなくなります(または、その変数をチェックするとかなりの数の逆参照、関数呼び出し、メモリ読み取りが必要になる可能性があるOOPではさらに悪いことになります)

私は決して

if(file.is_open==1){
....
}else if(file.is_open==0){
....

}

is_openはブール値であるため、残っているオプションは0のみであるため、代わりにis_open()を使用するようにコードをリファクタリングする必要がある場合に、入力を少し節約できることを指定するのは無意味です。 2つではなく。

そして、「else if」ステートメントは、「else if」が複数ある場合は、スイッチに切り替える必要があると思います。もちろん、言語で不可能な場合を除きます(Cがスイッチ内の文字列を処理できない方法など)。

于 2009-08-05T04:15:34.737 に答える
2

それ以外はデフォルトです。データには多数の可能性があるか、予期しないデータであるという意味です。

基本的なルールに従います。満たすことができるパラメーターがある場合はelseを使用し、ない場合はelseを使用します。私は通常、エラーにelseを使用します。

于 2009-08-05T04:12:40.263 に答える
2

ブールチェックにはif-elseのみを使用します。つまり、式が一致しない場合は、elseのみが存在する可能性があります。または私は他のものとすべてを取りたいです:それをデフォルトのように考えてください。

列挙型などを確認したい場合は、可能であれば、ご使用の言語でswitchステートメントを使用して確認してください。

Javaでは、文字列のスイッチを使用することはできません。したがって、次のようなものを使用できます。

if(string.equals("foo")) {
    // first case
} else if(string.equals("bar")) {
    // second case
} else {
    throw IllegalArgumentException(" ... ");
    // or log it
}

チェックを拡張できないかどうかわからない場合は、デフォルトの方法を提供できるかどうかを確認する必要があります。

于 2009-08-05T05:33:20.400 に答える
1

これは何assertのために作られたのではありませんか?

if (condition1) { ... }
else { assert(condition2); }

これは、スリーステートロジックにも拡張できます。

if (condition1) { ... }
elsif (condition2) { ... }
else { assert(condition3); }

を使用assertすると、コードが読みやすく、保守が容易になり、明確になります。そうは言っても、assertsとコメントはほとんど交換可能です。

于 2009-08-05T05:39:41.417 に答える
1

elseステートメントの条件が非常に明白な場合があります。例えば

if(user.IsNew) { } else { /*in this case user.IsNew != true*/ }

しかし、他のいくつかのケースでは、elseはそれほど明白ではなく、elseの条件を明確にする方がよい場合があります。これは、他の考えられる条件が追加された場合の将来の保証にもなります。

さらに、(最後の)elseに例外を挿入して、実装されていないケースについて通知することができます。これは、たとえばバックエンドとフロントエンドが分離されていて、誰かが列挙子に新しい値を追加した場合(または、テキストキーを使用している場合は新しいキーが導入された場合)、新しい値を最初に使用したときにエラーが発生する場合に非常に便利です。何が起こったのかわからない場合は、elseを使用しないと、デバッグがかなり難しくなる可能性があります。

if(user.SelectedStyle == Styles.Red) {
} else if(user.SelectedStyle == Styles.Basic) {
} else {
 throw new Exception("Not implemented");
}

上記の場合、新しいスタイル(たとえば、Style.Blue)を使用すると、アプリケーションで例外がスローされます。

于 2009-08-05T05:02:29.087 に答える
1

それは本当にスタイルとあなた自身の世界観の問題です。ガラスは半分空っぽで半分いっぱいですが、あなたはそれについて最もひどい議論をすることができます。

ブールテストがすべて同じタイプの場合は、switchステートメントが最適です。

そうでない場合は、追加のテストを省略して、最後のステートメントにフォールスルーすることの運用上の意味についてコメントを挿入することをお勧めします。上記のGertjanのコメントを参照してください。

于 2009-08-05T05:30:45.520 に答える
1

入力を明確に個別のケースに分けることができる場合、たとえば、「n」が0から100までの数値であると予想していて、3つのケースがある場合は、それらのケースが何であるかを明示的に示す方がほとんど良いと思います。

if (n >= 0 && n < 30) {
   case1();
} else if (n >=30 && n < 70) {
   case2();
} else if (n >=70 && n < 100) {
   case3();
}

状況によっては、「else」の場合がエラーチェックに適しています

} else {
   error("n should be between 0 and 100");
}

データの誤った値が以前にチェックされた場合、Cのような言語でパフォーマンスをわずかに向上させるために、最後のケースにelseを使用する場合があります。

} else { // (n >= 70 && n < 100)
   case3();
}

ただし、これが必要なのは、一部の言語では関数のドメインを表現できないためです。ドメインを明確に表現できる言語では、オプティマイザーがこのパフォーマンス上の利点を追加して、コードを具体的に指定できるようにする必要があります。後でケースを追加する方が簡単

...もちろん、これは科学ではなく芸術であり、場合によっては、厳格なルールに従えないことがあります。私は頻繁に次のようなコードを書いています。

if (p == NULL) {
   doSomething();
} else {
   doSomethingElse();
}

...他が何のために使用されるかという最初のif条件から非常に明白で暗黙的であるという事実によって正当化されます。

于 2009-08-05T05:58:04.840 に答える
1

else発明され、正当な理由で使用されています。どこで使用するかは、不自然なスタイルの感覚ではなく、達成しようとしているロジックによって決定される必要があります。

else if;で明示的な条件を使用することで、より自己文書化できると主張する人もいます。ただし、これにより、デフォルトのロジックにギャップが生じたり、すべての条件がキャッチされたりする可能性があります。

また、将来的には変更しやすいと言う人もいます。この議論は二の次です。デザインパターンを使用してモジュラーコードを作成することは、将来変更するのが簡単なことです。1行を作成することは、これらの種類のステートメントの対象にはなりません。

于 2009-08-05T06:25:36.330 に答える
0

状況によります。特定の基準が満たされた場合にのみアクションを実行しますか、それとも1つの値に特別なケースがあり、他の値に別のロジックセットがありますか?

于 2009-08-05T04:13:24.803 に答える