Должен ли я использовать идентификаторы блока ("end;") в моем коде? - PullRequest
6 голосов
/ 21 июля 2009

Код завершен говорит, что рекомендуется всегда использовать идентификаторы блоков, как для ясности, так и для защиты.

С тех пор, как я прочитал эту книгу, я занимался этим неукоснительно. Иногда это кажется чрезмерным, как в случае ниже.

Прав ли Стив Макконнелл настаивать на том, чтобы всегда использовать идентификаторы блоков? Какой из них вы бы использовали?

//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 

Ответы [ 15 ]

1 голос
/ 21 июля 2009

Я бы сказал, что он прав только ради того, что код все равно можно правильно интерпретировать, если отступ не верен. Мне всегда нравится иметь возможность находить начальные и конечные идентификаторы блоков для циклов, когда я просматриваю код, а не полагаться на правильные отступы.

1 голос
/ 21 июля 2009

Если я правильно помню, CC также дал несколько советов по поводу комментариев. Особенно о том, чтобы не переписывать , что код делает в комментариях, а объяснять , почему делает то, что делает

0 голосов
/ 26 октября 2010

Лично я рекомендую всегда использовать идентификаторы блоков на языках, которые их поддерживают (но следуйте стандартам кодирования вашей компании, как рекомендует @ Muad'Dib).

Причина в том, что в непифоновых языках пробел (вообще) не имеет смысла для компилятора , но для людей.

So

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);            

, кажется, делает одну вещь, но делает что-то совсем другое.

Я бы исключил комментарии в конце строки. Используйте IDE, которая выделяет блоки. Я думаю Castalia сделает это для Delphi. Как часто вы больше читаете распечатки кода?

0 голосов
/ 21 июля 2009

частые // комментарии в конце строк кода (в соответствии с вашим примером Well Behaved и Verbose) затрудняют чтение кода imho - когда я вижу его, я в конечном итоге сканирую «очевидные» комментарии в форме чего-то особенного, что обычно не не там.

Я предпочитаю комментарии только там, где нет очевидного (т. Е. Общая и / или уникальная функциональность)

0 голосов
/ 21 июля 2009

комментирование конца действительно полезно для html-подобных языков, поэтому искаженный код на C, как бесконечная последовательность if / else / if / else

...