У меня есть ощущение, что наиболее разумно это сделано в языках, где есть только "end" в формах, которые подразумевают группировку операторов (ruby?). Только - это, опять таки, неинтуитивно для тех, кто привык к парным "операторным скобкам".
В перле, кстати, это багофича, которая нужна синтаксическому анализатору, видимо, для возможности парсинга пользовательских операторов (вызовов функций без скобок). В Perl6 хотят отменить и {} и () в if/while, т.к. там синтаксический анализатор на другом принципе.
Я в перле пользуюсь страуструповскими скобками (на отдельных строках) для того, что бы подчеркнуть различие между многострочными блоками и многострочными конструкторами хэш-мапов. При необходимости однострочников или при сложном синтаксисе ещё и подчёркиваю назначение фигурной скобки унарным плюсом или ";" внутри {} (";" не может быть в конструкторе хэша). Тогда сразу понятно, где ниже блок операторов, а где - хэш: if ( 1 ) { # <- в начале - значит блок return { # в строке a => 1, b => 2, s => sub { # блок }, map { $_ => +{ z => 1 }; } qw( 1 2 3 ) # назначение скобок явно уточнено }; }
В перле, кстати, это багофича, которая нужна синтаксическому анализатору, видимо, для возможности парсинга пользовательских операторов (вызовов функций без скобок). В Perl6 хотят отменить и {} и () в if/while, т.к. там синтаксический анализатор на другом принципе.
Я в перле пользуюсь страуструповскими скобками (на отдельных строках) для того, что бы подчеркнуть различие между многострочными блоками и многострочными конструкторами хэш-мапов. При необходимости однострочников или при сложном синтаксисе ещё и подчёркиваю назначение фигурной скобки унарным плюсом или ";" внутри {} (";" не может быть в конструкторе хэша). Тогда сразу понятно, где ниже блок операторов, а где - хэш:
if ( 1 )
{ # <- в начале - значит блок
return { # в строке
a => 1,
b => 2,
s => sub
{ # блок
},
map { $_ => +{ z => 1 }; } qw( 1 2 3 ) # назначение скобок явно уточнено
};
}
Reply
Reply
Reply
Leave a comment