Duncan Parsons schrieb:
if you indent as waldo suggests certain bugs or compilation issues can be more immediately apparent - do the begins & end match up? It's difficult to see when they are at the same level as the rest of the code.

If indentation is "overworked" it doesn't tell you very much anymore. If nearly 
each line is indented, then it becomes unclear and confusing to me. For very short code 
snippets it may work but if you have 10 or 20 levels of indentation (nested WITH, CASE, 
FOR, IF, ...) then adding an artificial indentation for each BEGIN/END pair would nearly 
double the number of indentations and would make it very complex IMO. Also, the 
indentation should be independend on whether only one command follows or multiple:

if a=b then
  do-something

and
if a=b then
  begin
  do-something
  do-something-else
  end;

should be indented identically to stay logical. Having it

if a=b then
  begin
     do-something
     do-something-else
  end;

would also clutter it too much IMO. The chance of consecutive lines starting in 
the same column is much less. And only they give a certain structure in the 
code. Also, whenever I have an indentation I know that this means that the 
linear code flow is interrupted by a loop or a branch.

Regarding missing BEGIN/ENDs: They may not stay out so much if they are aligned 
with the block but you can still check easily whether each block (of more than 
one command) starts with a BEGIN and ends with an END. Also, this is needed 
much less often than checking the code flow.

Some places I've been like the begins to be inline with a conditional/loop 
declaration/etc, but I've never liked that. With one (large multinational) 
Their chosen style for if/elseif/else was:
if x then begin
  code
end else if y then begin
  code
end else begin
  code
end;
Which I found to be as helpful as a ice teapot, as scanning down you see one if 
with three ends and no context for what was happening in between..

Yes, I would also not do it that way. Just imagine a missing BEGIN or END. Or 
adding another command in front of the second IF statement: You would have to 
enclose the new statement and the following IF with BEGIN/END. But where to 
place them? You can't see it immediately. But when having it formatted like this

if x then begin
  code
end else if y then begin
     code
end else begin
     code
     end;

you can immediately see that the new-command has to be inserted like that:

if x then begin
  code
end else begin
  new-command
if y then begin
     code
end else begin
     code
     end;
  end;



--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to