我应该在代码中使用块标识符("end;")吗?

Jos*_*ons 6 delphi coding-style code-formatting

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 
Run Code Online (Sandbox Code Playgroud)

Vin*_*Vin 10

我一直遵循' 乖巧和冗长 '的风格,除了那些不必要的额外注释.

不知何故,能够更快地看到代码并使其更有意义,比在解密哪个块结束之前必须花费至少几秒钟更有意义.

提示:C#的Visual Studio KB快捷方式跳转开始和结束:Ctrl +]

如果您使用Visual Studio,那么在块的开头和结尾处使用C#的大括号也有助于您有一个KB快捷方式可以跳转到开始和结束


Mua*_*Dib 7

我会使用我公司为其编码标准设置的任何一个.

话虽这么说,我宁愿使用第二个更冗长的块.阅读起来容易得多.但是,在某些情况下,我可能会放弃结尾的评论.


Sam*_*ijo 7

就个人而言,我更喜欢第一个,因为恕我直言"结束"; 不要告诉我太多,一旦一切都接近,我可以通过身份来判断什么时候会发生什么.

我相信在使用大型语句时,块更有用.您可以进行混合方法,在其中插入一些"开始...结束;"并注释它们结束的内容(例如将其用于with和第一个if).

恕我直言,您也可以将其分解为更多方法,例如,该部分

  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
Run Code Online (Sandbox Code Playgroud)

可以采用单独的方法.


jas*_*onh 5

我认为这在某种程度上取决于具体情况.有时你只是有一个这样的方法:

void Foo(bool state)
{
    if (state)
        TakeActionA();
    else
        TakeActionB();
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何使它看起来像这样:

void Foo(bool state)
{
    if (state)
    {
        TakeActionA();
    }
    else
    {
        TakeActionB();
    }
}
Run Code Online (Sandbox Code Playgroud)

完全改善了可读性.

  • 我认为我仍然更喜欢第二个例子的原因是一致性.你是对的,对于非常短暂和简短的陈述,它并没有增加很多价值,但它确实对它做了更复杂的陈述,我会尽量保持我的编码风格尽可能一致. (2认同)