Ну никак не могу решить:
если а == 3 то
ура();
кн
если а == 3 то
ура();
кн_если
если а == 3 то
ура();
кн//если а == 3
Если везде писать только кн, то код будет лёгким, но легко будет и запутаться при глубокой вложенности. Самое плохое - будет затруднена диагностика компилятором ошибок структуры. Будет легко испортить структуру, поместив else не туда и внеся логическую ошибку.
Третий вид наиболее хорош при глубокой степени вложенности, когда к концу чтения уже не помнишь начало. Вроде как глубокая вложенность вообще считается дурным тоном в наше время. Но в реальности от неё не всегда можно избавиться. И на самом деле в большинстве случаев третий вариант только мешает.
Если везде писать любой из полных вариантов, то это может выбесить. В лиспе закрываешь круглые скобки, пока не мигнёт defun. В большинстве случаев это удовлетворительно работает. Если заставить всегда писать и читать простыню из закрывающих конструкций, это может выбесить не хуже XML.
Среда разработки может, естественно, преобразовывать любой из этих вариантов в любой. Можно, допустим, в исходнике держать всегда полный, а в редакторе отключать. Или заставить среду дописывать. Или... или... или...
Возможность писать вариант по своему выбору сочетает и достоинства, и недостатки каждого способа. Возможность автоматически менять структуру порождает угрозу наличия кучи несущественных изменений в коде. Запутался человек в коротком варианте, решил заменить на полный. Через квартал решил поменять обратно. В итоге получили нечитаемую историю файла, реальные изменения потонули в море форматирования. Читать такую историю уже практически невозможно - нужен специальный фильтр, который сможет игнорировать различия в концах команд.
Мне кажется, тут нужно просто угадать правильную точку в пространстве компромиссов, и неверное угадывание может решить судьбу всего языка.
Полиглоты, ваши мнения?
Может быть, наложить ограничения на сложность? Типа при определённом расстоянии в строках между элементами конструкции и при определённой вложенности делать рекомендованным полный вариант и выдавать предупреждение?