2016-05-27 7 views
0

プログラミングを開始して以来、条件文では!=または!conditionでないことがあります。多分私の脳は複数の否定を打ち倒すために英語で事前調整されているからかもしれません。しかし、私は条件付き声明で真であるかどうかを評価することに関して、一般的な開発コミュニティが受け入れている慣行があるのだろうかと疑問に思っています。または、むしろ、私が時々それを見る方法:偽でないと評価する。条件文で等しくないための共通コード規約

多分!=が完全にやむを得ないことができない例外がありますか?例については

これは非常に簡単で、些細なことかもしれないが、これは

string myStringVar = "dogs"; 


if (myStringVar != "dogs") //In my mind, "False this is not true" 
{ 
    //code 
} 
else if (myStringVar != cats) //In my mind, "True this is false" 
{ 
    //code 
} 

またはこの望ましい

if (myStringVar == "dogs") 
{ 
    //"True" 
} 
else if (myStringVar == "cats") 
{ 
    //"False" 
} 

であるが好ましい次に

bool MyBoolMethod() 
{ 
    return false; 
} 


if (!MyBoolMethod()) // True this method does not return true 
{ 
    //code 
} 
があります

これ非常に簡単で簡単な例です。わかりやすい、保守可能なコードを書く方法を知りたいだけです。他の誰かがこのような条件文を読んでいくのはやや難しい時があるのですか?

+1

'(myStringVar!=" dogs ")' myStringVar'は '' dogs "'と等しくないので、読みました。つまり、条件付きで問題にすべきではないということです。 –

+0

それは私の問題です。デバッグやコードの書き出し中に、変数を割り当てることが想像されます。もっと複雑な状況では、私は 'not equal'と' equal'を混同しているようです。 –

+0

最初のif-else-if構文は間違いなく貧弱です。そのロジックは具体的なことを確認する必要があります。論理の2つの枝は両方の論理的構成に入るシナリオを捕らえることができる。その場合の平等をチェックすることは間違いなく良いでしょう。それはほとんどあなたが何をしたいかによって決まります。あなたは間違いなく二重否定を避けるべきです。 trueで始まる 'notFound'と呼ばれるブール変数を持ち、問題のものを見つけるとfalseに設定します。偽を開始し、一度見つかったらtrueに設定される 'found'変数を持つ方が良いでしょう。 – ManoDestra

答えて

1

"上記のうちどれもありません。"

stringを使用しているため、myStringVarは何でもかまいません。私が言う場合:

string myStringVar = "Aardvark"; 

を次に、あなたの最初の例では、それはコードのmyStringVar != "dogs"セクションを実行します。 2番目の例ではどちらも実行されません。したがって、それらは同等のコードではありません。

唯一の方法は、Enumsを使用している場合です(その場合は、caseステートメントを使用することをお勧めします)。

3番目の例では、これは、MyBoolMethod()の名前と将来のコーダーがどれほど理解しやすいかによって異なります。例を使用するには、

bool isDog() 
{ 
    return false; 
} 

がわかりやすいです。問題はその後になり、私は最初は二以上の明確であることを主張するだろう

if(isNotDog()) ... 

より明確

if(!isDog()) ... 

です。しかし、それ以外の状況もあります。

+0

私は意味のあるメソッドシグネチャを書くことに同意します。次にコード内のどこかで戻り値を区別することは明らかです。あなたの例と私の例は、私が本当に焦点を当てる必要があるコーディング規約が意味のある署名とプロパティ名が正しいことを証明していると思いますか? –

+1

はい。コーディングスタイルには非常に良い本がいくつかありますが、私はそれらが役に立つと思っています(私が考えているのはJavaですが、名前は思い出せません)。私は6ヶ月ルールを使用しています。「今から6ヶ月後に私自身のコードを読んだら、それを理解するのか、それともバロさんが書いたものを尋ねるのでしょうか? –

1

平等と不平等は、快適になり、文脈の中で選択するだけのものです。論理的な問題が、不平等を使用することを失格にすることを検討している場合は、平等をテストすることを求める必要がある場合。

myboolメソッドを使用し始めると、読みやすさとメンテナンス性が優れたデザインで強化されます。

Exmaple

public class Animal 
{ 
    public static Enum AnimalType 
    { 
     Dog, 
     Cat 
    } 

    private _animalType; 

    public Animal(Enum AnimalType type) 
    { 
     AnimalType = _animalType; 
    } 

    public bool isOfType(Enum AnimalType type) 
    { 
     return _animalType == type ? true : false; 
    } 

} 

public someothermethod() 
{ 
    //doing inclusion 
    If(MyAnmialObject.isOfType(Animal.AnimalType.Dog)) 
    { 
     //if type matches 
    } 

    //Doing exclusion 
    If(!MyAnmialObject.isOfType(Animal.AnimalType.Dog)) 
    { 
     //if type does not match 
    } 
} 

あなたはまだ不平等に慣れなければならないが、あなたはそれがisOfTypeと名前付きの型をチェックして知っています。

+0

私が 'not equal 'と出会った多くの状況があるので、開発者は' else文'を書く必要がありません。 'MyAnimalObject'が' Animal.AnimalType.Dog'の型でないときに何かしたいのであれば、ロジックを書く最良の方法は、ififと等しいではなく、等しくないif文を書くことです。そうでなければ私の他の動物コードを実行しますか? –

+1

動物が犬ではないという条件で何かをしているだけなら、なぜそれをチェックしないのですか?チェックするのが犬で、elseブロックのfalse条件を処理すると、コードなしのifブロックが作成されます。あなたがいつも他人を欲しがっているなら、あなたは三項演算子を見ることができます。 –

+0

まあ私の質問の一部として条件演算子を追加したはずです。なぜあなたは単にそれを確認するだけではないでしょうか?他の開発者のコ​​ードを編集して、犬だったらどうなるかを追加する必要がありました。コードが書かれた時点で、そうでなければ何をすべきかを知る必要がありました。だから、私はそれが可読で維持可能であると思う。私はこれについて、しばらく考えていました。 –

関連する問題