2009-04-15 21 views
2

このように:ブール種類

return IsValid(); 

これは私がこのコードを書く方法です。私は開発者のスキルに疑問を呈していませんが、おそらく開発者の魂を調べようとしています。なぜ開発者はより複雑なコードを好み、よりシンプルで直感的ではないのでしょうか?それとも、ブール型をファーストクラスの市民として受け入れることが難しいのだろうか?

+0

MyBoolean = True Then ... – rvarcher

+0

が返されます。IsValid()?真:本当ですか?真:本当ですか?真:本当ですか?正誤; – Juliet

答えて

6

はい、あなたの言うとおりにする必要があります。これらの人々は、おそらくCS 101のように、それを最初に学んだので、これらの過度に冗長なことをやっています。の領域外に出ることは決してありません。より良い、より簡単な方法があるかどうかを調べるにはです。

これは彼らの能力に言います。良いプログラマは、少し思いやりがあり、隠れている必要がありません。

https://stackoverflow.com/questions/423823#424005,https://stackoverflow.com/questions/423823#423915も参照してください。

15

私はreturn IsValid();が完全に有効で読みやすいコードだと思います。

ところで、私は確かに(IsValid() ? true : false)と書いている人を叩いています。それは不必要に複雑です。

PS。これはsvn blameのためのものです。

+0

Seconded。私はコードの最初の例を多く見て、それを取得しないでください。 – Dana

+0

初心者のエラーです。私はCSイントロコース(スキーム中)で多くのことをやっている学生を見ます。あまりにも悪いsvnの責任はあなたのために叩きをしません:) –

+0

@Damienポレット:ああ、あまりにも悪い。 btw、私は 'IsValid()を打つつもりですか? true:false'、 'if(IsValid()) 'ではなく、その理由は'?: 'の使い方を知っていれば、そのように書くのに十分な能力があるはずです。 –

1

私はまた、 "return IsValid();"と言っています。私はあなたがそうすることで100%正しいと思います。

1

return IsValid();です。以下のコード、より簡潔 - チャンピオン

2

最初の2つの例の理由の選択は、完全にヒトのものである:

  • 無知
  • 不足
  • コードはだけ、リファクタリングされた
  • 1のコードと知的関与のハーフウェイ(私はそれが二重否定知っている) return IsValid();

    で行くしない理由はありません

あなたはぼんやりしている場合は

3

、それはここからいくつかのコードをリファクタリングするのは簡単です。これに

private bool ConsiderTheOstrich() 
{ 
    /* do ostrich things */ 

    if(someCondition && unpredictableThing == 5) 
     return true; 
    else 
    { 
     // log something 
     return false; 
    } 
} 

private void IsValid() { return (someCondition && unpredictableThing == 5); } 

/* ... */ 

private void ConsiderTheOstrich() 
{ 
    /* do ostrich things */ 

    if(IsValid()) 
     return true; 
    else 
     return false; // ostrichlogger logs it for us now 
} 

簡潔にするために、余分な機会に気付かず。

bool retValue; 
if (IsValid()) 
{ 
    retValue = true; 
} 
else 
{ 
    retValue = false; 
} 

return retValue; 

は、文字によって支払わいくつかのプログラマです:

1

私も時々、これは私が維持レガシーコードのいくつかを見ますか?

+1

これは、メソッドごとに1つのreturn文のコーディングスタイルを厳密に守った結果である可能性があります。 – JohnFx

+0

@JohnFx - これも真実かもしれません。私はまた、「唯一のリターン・ステートメント」の哲学を好きではありません:P – Dana

+0

私もそれを見ました! –

0

はい、もちろんreturn IsValid();は、あなたが持っているコードが上記のものであれば最も最適です。

あなたの機能が何をしているのですか?コードの残りの部分は、なぜ開発者がIsValid()の周りにifステートメントを置くのかについてより多くの光を当てるかもしれません。

結局のところ、IsValid()を返すだけの場合、呼び出しコードは、このラッパーメソッドを持つのではなく、IsValid()を直接チェックしていないのはなぜですか?

2

のデバッグの場合、最初のケースが簡単です。あなたのソースを歩いていくと、戻り値を見るためにimmediate windowを開いたり、IsValid();を実行したりせずに、戻り値が何であるかを調べる方が簡単です。第一及び第二のケースでは

、開発者は、は認識していない可能性があります /彼は単に行うことができます

リターンでIsValid();

最後に、開発者は、企業ポリシーのために第1構文または第2構文を使用することがあります。

0

気晴らし

私はそれが前に私のコードで発生していますし、私は(私はもっぱらSOせい!)私は中断したりコーディングしながら、注意を払っていなかったときにその背中をトレースすることができます知っている

無知

これを行うより良い方法はわかりません。私たちは、すべてのプログラマーが論理的に考えていることは当たり前のことですが、そうではありません。誰かがいつもやってくれたので、それは彼らがそれを行うには続ける方法です方法です

If (integerA == integerB) { //do special stuff } 

//Given integer equality; boolean equality ought to look the same... 
If (isValid() == true) { //do special stuff } 

勢い

:一部のプログラマーは、彼らが前に見てきたもののパターンに純粋に行っています。