2

コード レビュー中に、次のような C# コードの多くの場所を発見しました。

if(IsValid()) {
     return true;
}
else {
     return false;
}

または「より良い」:

return (IsValid()? true : false);

私はいつも、次のようにコードを書かないのはなぜだろうと思っていました:

return IsValid();

これが私がこのコードを書く方法です。開発者のスキルを疑っているわけではありませんが、開発者の魂を探ろうとしているのかもしれません。なぜ開発者は、より単純で直感的なコードではなく、より複雑なコードを好むのでしょうか? それとも、ブール型を一級市民として受け入れるのが難しいからでしょうか?

4

10 に答える 10

15

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

IsValid() ? true : falseところで、私は顔に( ) と書いた人なら誰でも平手打ちします。不必要に複雑です。

PS。これがsvn blame設計されたものです。

于 2009-04-15T15:52:03.327 に答える
7

はい、あなたの言うとおりにすればいいのです。これらの人々は、おそらくCS 101で最初にそのように学んだため、これらの過度に冗長なことを行っています.

これは彼らの能力を物語っています。優れたプログラマーは、もう少し思慮深く、隠蔽を減らす必要があります。

于 2009-04-15T16:00:06.710 に答える
3

最初の 2 つの例の理由は、完全に人為的なものです。

  • 無知
  • 自分のコードへの知的関与の欠如
  • コードはリファクタリングされましたが、途中でした

行かない理由はありません(二重否定であることはわかっています)return IsValid();

于 2009-04-15T15:55:42.930 に答える
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
}

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

于 2009-04-15T15:59:24.620 に答える
2

最初のケースは、デバッグ中の方が簡単です。ソースをステップ実行すると、戻り値を確認するためだけに開いimmediate windowたり実行したりしなくても、戻り値が何であるかを簡単に見つけることができIsValid();ます。

1 番目と 2 番目のケースでは、開発者は自分が簡単にできることに気付いていない可能性があります。

IsValid() を返します。

最後に、会社のポリシーにより、開発者は最初または 2 番目の構文を使用することを余儀なくされる場合があります。

于 2009-04-15T16:44:02.563 に答える
1

「return IsValid();」とも言います。私はあなたがそうすることで100%正しいと思います

于 2009-04-15T15:52:26.260 に答える
1

return IsValid();行く方法です。より少ないコード、より簡潔 - チャンピオンの選択

于 2009-04-15T15:53:04.200 に答える
0

気晴らし

以前に自分のコードで発生したことを知っており、コーディング中に中断されたときや注意を払っていなかったときまでさかのぼることができます (私は SO だけを責めます!)

無知

それを行うためのより良い方法を知らない。すべてのプログラマーが論理的に考えるのは当然だと思いますが、そうではありません。一部のコーダーは、以前に見たもののパターンに純粋に取り組んでいます。

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

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

勢い

それは誰かが常にそれを行ってきた方法であり、したがって、彼らはそれを続けている方法です.

于 2009-04-15T16:48:31.477 に答える
0

私が維持しているレガシーコードのいくつかを時々見ます:

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

return retValue;

一部のプログラマーはキャラクターによって支払われますか?

于 2009-04-15T16:00:03.853 に答える
0

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

私は何が関係していると思いますが、あなたの機能は他に何をしているのでしょうか? コードの残りの部分は、開発者が IsValid() の周りに if ステートメントを配置する理由をさらに明らかにする可能性があります。

結局のところ、IsValid() を返すだけなら、このラッパー メソッドを使用するのではなく、呼び出し元のコードで IsValid() を直接チェックしないのはなぜですか。

于 2009-04-15T16:00:59.233 に答える