7

私がよく目にする最もひどく冗長なコード構成は、コード シーケンスの使用を伴います。

if (condition)
    return true;
else
    return false;

単純に書くのではなく

return (condition);

Pascal や C から PHP や Java まで、あらゆる種類の言語でこの初歩的なエラーを見てきました。コードレビューで、他にどのような構造にフラグを立てますか?

4

19 に答える 19

14
if (foo == true)
{
   do stuff
}

私はそれを行う開発者に、そうあるべきだと言い続けています

if ((foo == true) == true)
{
   do stuff
}

しかし、彼はまだヒントを得ていません。

于 2008-09-26T12:51:01.453 に答える
10
if (condition == true)
{
  ...
}

それ以外の

if (condition)
{
  ...
}

編集:

またはさらに悪いことに、条件付きテストを好転させます。

if (condition == false)
{
  ...
}

これは次のように簡単に読み取れます

if (condition) then ...
于 2008-09-26T12:49:27.383 に答える
8

ソース管理の代わりにコメントを使用する:-
関数を削除する代わりにコメントアウトまたは名前変更し、そのソース管理を信頼することで、必要に応じてコメントを取り戻すことができます。
-単に変更を加えてソース管理に責任を負わせるのではなく、「RWF変更」などのコメントを追加します。

于 2008-09-26T13:04:19.207 に答える
5

どこかで私はこのことを見つけました。これはブール値の冗長性の頂点であることがわかりました。

return (test == 1)? ((test == 0) ? 0 : 1) : ((test == 0) ? 0 : 1);

:-)

于 2008-09-26T13:08:41.130 に答える
4

冗長コード自体はエラーではありません。しかし、あなたが本当にすべてのキャラクターを救おうとしているのなら

return (condition);

冗長でもあります。あなたは書ける:

return condition;
于 2008-09-26T13:13:06.377 に答える
4

C以外の言語での割り当てとは別に宣言する:

int foo;  
foo = GetFoo();
于 2008-09-26T13:00:53.177 に答える
3
void myfunction() {
  if(condition) {
    // Do some stuff
    if(othercond) {
      // Do more stuff
    }
  }
}

それ以外の

void myfunction() {
  if(!condition)
    return;

  // Do some stuff

  if(!othercond)
    return;

  // Do more stuff
}
于 2008-09-26T12:52:36.910 に答える
3

私はかつてこれを繰り返し行った男がいました:

bool a;
bool b;
...
if (a == true)
    b = true;
else
    b = false;
于 2008-09-26T12:56:36.307 に答える
3

最後に無駄に戻る:

   // stuff
   return;
}
于 2008-09-26T12:47:43.737 に答える
2

nullの恐れ(これも深刻な問題につながる可能性があります):

if (name != null)
  person.Name = name;

冗長なif(elseを使用していない):

if (!IsPostback)
{
   // do something
}
if (IsPostback)
{
   // do something else
}

冗長チェック(Splitがnullを返すことはありません):

string[] words = sentence.Split(' ');
if (words != null)

チェックの詳細(ループする場合、2番目のチェックは冗長です)

if (myArray != null && myArray.Length > 0)
  foreach (string s in myArray)

そして、ASP.NETの私のお気に入り:DataBindページをレンダリングするためにコード全体に散らばっています。

于 2008-09-26T13:15:02.423 に答える
2

コピーと貼り付けの冗長性:

if (x > 0)
{
   // a lot of code to calculate z
   y = x + z;
}
else
{
   // a lot of code to calculate z
   y = x - z;
}

それ以外の

if (x > 0)
  y = x + CalcZ(x);
else
  y = x - CalcZ(x);

またはさらに良い(またはより難解な)

y = x + (x > 0 ? 1 : -1) * CalcZ(x)
于 2008-09-26T13:37:25.040 に答える
2

私が目にする最も一般的な冗長コード構造は、プログラムのどこからも呼び出されないコードです。

もう 1 つは、使用する意味がない場合に使用されるデザイン パターンです。たとえば、「new Bob()」とだけ書くのではなく、どこにでも「new BobFactory().createBob()」と書きます。

未使用の不要なコードを削除すると、システムの品質とチームのメンテナンス能力が大幅に向上します。システムから不要なコードを削除することを考えたことのないチームにとって、この利点はしばしば驚くべきものです。私は以前、チームと一緒に座って、システムの機能を変更せずにプロジェクトのコードの半分以上を削除するというコード レビューを実行しました。彼らは気分を害するだろうと思っていましたが、その後、デザインのアドバイスやフィードバックを頻繁に求めてきました.

于 2009-06-10T15:00:21.347 に答える
2

文字列で .tostring を使用する

于 2008-09-26T12:48:24.407 に答える
2

次のオプションのいずれかの代わりに、ステートメントを関数の最初のexitステートメントとして配置して、その関数の実行を無効にします。

  • 機能を完全に削除する
  • 関数本体のコメント
  • 機能は維持するが、すべてのコードを削除する

as first ステートメントを使用するexitと、見つけるのが非常に難しくなりますが、簡単に読み直すことができます。

于 2008-09-26T12:58:56.380 に答える
2

スタックではなくヒープに要素を割り当てます。

{
    char buff = malloc(1024);
    /* ... */
    free(buff);
}

それ以外の

{
    char buff[1024];
    /* ... */
}

また

{    
    struct foo *x = (struct foo *)malloc(sizeof(struct foo));
    x->a = ...;
    bar(x);
    free(x);
}

それ以外の

{
    struct foo x;
    x.a = ...;
    bar(&x);
}
于 2008-09-29T07:49:22.073 に答える
1

私はよく次のことに遭遇します:

function foo() {
    if ( something ) {
        return;
    } else {
        do_something();
    }
}

しかし、他の人はここでは役に立たないことを彼らに伝えるのは助けにはなりません。それはどちらかでなければなりません

function foo() {
    if ( something ) {
        return;
    }
    do_something();
}

または-do_something()の前に実行されるチェックの長さに応じて:

function foo() {
    if ( !something ) {
        do_something();
    }
}
于 2008-09-26T13:09:02.987 に答える
1

悪夢のようなコードレビューから.....

char s[100];

に続く

memset(s,0,100);

に続く

s[strlen(s)] = 0;

たくさんの厄介なもので

if (strcmp(s, "1") == 0)

コードについて散らかっています。

于 2008-09-30T20:37:25.150 に答える
0

動作を設定するときに配列を使用する。挿入する前に、すべてをチェックして配列に含まれていないことを確認する必要があります。これにより、コードが長くなり、遅くなります。

于 2008-09-26T13:12:52.180 に答える
0

冗長な .ToString() 呼び出し:

const int foo = 5;
Console.WriteLine("Number of Items: " + foo.ToString());

不要な文字列フォーマット:

const int foo = 5;
Console.WriteLine("Number of Items: {0}", foo);
于 2008-10-02T13:16:14.400 に答える