6

Code Completeは、明確にするためと防御策として、常にブロック識別子を使用することをお勧めします。

その本を読んで以来、私はそれを宗教的に行ってきました。ただし、以下の場合のように、過剰に見えることもあります。

Steve McConnell が常にブロック識別子を使用することを主張するのは正しいですか? これらのうちどれを使用しますか?

//naughty and brief
with myGrid do
  for currRow := FixedRows to RowCount - 1 do
    if RowChanged(currRow) then
      if not(RecordExists(currRow)) then
        InsertNewRecord(currRow)
      else
        UpdateExistingRecord(currRow);

//well behaved and verbose
with myGrid do begin
  for currRow := FixedRows to RowCount - 1 do begin
    if RowChanged(currRow) then begin
      if not(RecordExists(currRow)) then begin
        InsertNewRecord(currRow);
      end  //if it didn't exist, so insert it
      else begin
        UpdateExistingRecord(currRow);
      end;  //else it existed, so update it
    end;  //if any change
  end;  //for each row in the grid
end;  //with myGrid 
4

15 に答える 15

10

私は常に「行儀がよく、冗長」なスタイルに従っていますが、最後のブロックにある不要な余分なコメントは除きます。

どういうわけか、どのブロックがどこで終わっているかを解読する前に少なくとも数秒を費やすよりも、コードを見てそれをより速く理解できる方が理にかなっています.

ヒント: C# ジャンプの開始と終了の Visual Studio KB ショートカット: Ctrl + ]

Visual Studio を使用している場合、ブロックの先頭と末尾に C# の中かっこがあると、先頭と末尾にジャンプするための KB ショートカットがあるという事実によっても役立ちます。

于 2009-07-21T18:49:41.050 に答える
7

会社がコーディング標準として設定したものを使用します。

そうは言っても、2番目のより冗長なブロックを使用することをお勧めします。読みやすくなっています。ただし、場合によっては、ブロック終了コメントを省略する場合があります。

于 2009-07-21T18:49:54.373 に答える
7

個人的には、私見が「終わり」であるため、最初のものを好みます。多くを語ることはありません。すべてが終われば、識別によっていつ何が起こるかを知ることができます。

ステートメントが大きい場合は、ブロックの方が便利だと思います。いくつかの「begin ... end;」を挿入し、それらが終了する内容をコメントする混合アプローチを作成できます (たとえば、with と最初の if に使用します)。

IMHO、これをより多くのメソッドに分割することもできます。

  if not(RecordExists(currRow)) then begin
    InsertNewRecord(currRow);
  end  //if it didn't exist, so insert it
  else begin
    UpdateExistingRecord(currRow);
  end;  //else it existed, so update it

別の方法である可能性があります。

于 2009-07-21T18:52:06.053 に答える
5

状況にもよると思います。時々あなたは単にこのような方法を持っています:

void Foo(bool state)
{
    if (state)
        TakeActionA();
    else
        TakeActionB();
}

私はそれがどのように見えるかわかりません:

void Foo(bool state)
{
    if (state)
    {
        TakeActionA();
    }
    else
    {
        TakeActionB();
    }
}

読みやすさがまったく向上します。

于 2009-07-21T18:56:19.850 に答える
4

私は Python 開発者なので、ブロック識別子は必要ないと思います。それらがなくても、私はとても幸せです。インデントは私にとって十分な指標です。

于 2009-07-21T19:12:36.510 に答える
2

ブロック識別子は読みやすいだけでなく、if elseロジックで何かを変更したり、単に行を追加したりして、その行が同じ論理ブロックにないことを認識しない場合は、エラーが発生しにくくなります。 。

2番目のコードブロックを使用します。最初のものはより美しく、より親しみやすいように見えますが、これは言語の問題であり、ブロック識別子ではないと思います

可能であれば、checkstyleを使用して、角かっこが使用されていることを確認します。

于 2009-07-21T18:54:28.810 に答える
1

私の記憶が正しければ、CC はコメントに関するアドバイスもいくつか提供していました。特にコメントでコードがをするかを書き直すのではなく、なぜそれが何をするのかを説明することについて。

于 2009-07-21T18:50:58.973 に答える
1

私は、より簡潔なコードを好む人たちと一緒です。

そして、簡潔なバージョンよりも詳細なバージョンを好むのは、普遍的な適切さというよりも、個人的な選択のようです. (まあ、社内では(ミニ)ユニバーサルルールになるかもしれません。)

(F1 and F2) or ((not F2) and F3)これは過剰な括弧のようなものです: orのように好む人もい(A - (B * C)) < 0ますが、必ずしも優先順位のルールを知らないからではありません。彼らにとっては、その方がより明確です。

于 2010-08-27T13:28:30.483 に答える
1

私は幸せな媒体に投票します。私が使用するルールは、コンテンツが複数行の場合はいつでもブラケット キーワードを使用することです。実際に:

// clear and succinct
with myGrid do begin
  for currRow := FixedRows to RowCount - 1 do begin
    if RowChanged(currRow) then begin
      if not(RecordExists(currRow))
        InsertNewRecord(currRow);
      else
        UpdateExistingRecord(currRow);
    end;  // if RowChanged
  end;  // next currRow
end;  // with myGrid
于 2010-08-27T13:36:38.830 に答える
1

常にどちらか一方というわけではありません。私は自分自身を信頼しているので、短く簡潔なスタイルを使用します。しかし、全員が同じスキルを持っているわけではなく、保守性が重要なチーム環境にいる場合は、後者を選択することをお勧めします。

于 2009-07-21T18:53:49.653 に答える
1

私のひざまずく反応は、2番目のリストです(みんなが言っているように、繰り返しのコメントは行末から削除されます)が、より深く考えた後、最初のリストに1行または2行の有用なものを追加します何が起こっているかを説明する前にコメントしてください(必要な場合)。明らかに、このおもちゃの例では、簡潔な回答の前のコメントでさえおそらく必要ありませんが、他の例では必要になる場合があります。

画面上のコードが少なく (それでも読みやすい)、理解しやすいと、IMO のコードの将来の部分のために脳のスペースを空けることができます。

于 2009-07-21T19:00:26.350 に答える
1

インデントが正しくなくてもコードを正しく解釈できるという理由だけで、彼は正しいと思います。コードをざっと見て、適切なインデントに頼らずに、ループの開始ブロック識別子と終了ブロック識別子を見つけられるようにしたいといつも思っています。

于 2009-07-21T18:52:43.213 に答える
0

終わりをコメントすることは、htmlのような言語にとって本当に便利なので、if / else / if/elseの無限の連続のような不正な形式のCコードを実行します

于 2009-07-21T18:54:32.693 に答える
0

頻繁な//コード行の最後のコメント(Well Behaved and Verboseの例による)は、コードを読みにくくします-私がそれを見ると、「明白な」コメントをスキャンして、通常は存在しない特別なものを形成します。

明らかでない場合(つまり、全体的および/または独自の機能)にのみコメントを好みます

于 2009-07-21T18:55:16.513 に答える
0

個人的には、ブロック識別子をサポートする言語で常に使用することをお勧めします(ただし、@ Muad'Dibが提案するように、会社のコーディング標準に従ってください)。

その理由は、Python以外の言語では、空白は(一般的に)コンパイラーにとっては意味がありませんが、人間にとっては意味があるからです。

それで

with myGrid do
  for currRow := FixedRows to RowCount - 1 do
    if RowChanged(currRow) then
      Log(currRow);
      if not(RecordExists(currRow)) then
        InsertNewRecord(currRow)
      else
        UpdateExistingRecord(currRow);            

1つのことをしているように見えますが、まったく異なることをしています。

ただし、行末のコメントは削除します。ブロックを強調表示するIDEを使用します。CastaliaはDelphiのためにそれを行うと思います。コードのプリントアウトをもうどのくらいの頻度で読みますか?

于 2010-10-26T01:24:58.817 に答える