Code in which all blocks are fenced by begin and end is simple and
modular to understand. All blocks should use begin..end, except for
repeat and case blocks.
While most Delphi structures allow begin and end to be omitted when
there is only a single statement in the block, doing so often makes code more error-prone and
difficult to read.
Also, if another statement is added at a later stage and begin and
end are not added, the new statement will be unexpectedly outside of the block.
While the code below may seem correct at a glance, the Exit will always be
encountered and Foo.Bar will never be run.
if not Assigned(Foo) then
Writeln('Foo not assigned!');
Exit;
Foo.Bar;
begin and end:
if not Assigned(MyObj) then Exit;
if not Assigned(MyObj) then begin Exit; end;