Оператор case без begin/end в Delphi

Перевод поста The case of a missing begin/endopen in new window.

Delphi никогда не перестаёт удивлять меня... Вы знали что это правильный синтаксис?

case a of
  0: Writeln(0);
  else
    Writeln('else');
    Writeln(a);
end;
1
2
3
4
5
6

Этот код компилируется и работает точно как следующий фрагмент.

case a of
  0: Writeln(0);
  else begin
    Writeln('else');
    Writeln(a);
  end;
end;
1
2
3
4
5
6
7

Я лично никогда бы не убрал begin/end внутри оператора case/else, но не все согласяться с этим. Я нашёл такой пример в очень (ОЧЕНЬ!) старом кода (он был написан на Delphi 2) и я был довольно удивлён, что он компилируется.

Anton Alisov предложил форматировать первый пример так:

case a of
  0: Writeln(0);
else
  Writeln('else');
  Writeln(a);
end;
1
2
3
4
5
6

Я думаю так код выглядит более понятно.

Последниее изменение: 24.08.2023, 06:42:55