correct:
if(true) {
}
incorrect:
if(true)
{
}
Why is this style enforced, does it have something to do with the language spec, or is it just because they prefer one style over another ?
Most C descended languages use the style if ( <condition> ) <statement>
, the statement
is executed if condition
is true. The statement
can be either a single statement or brace enclosed block.
Go's if
statements require a following brace enclosed block, not a single statement. This is to head off a common error that most style guides try to avoid by requiring that all if
statements use braces.
//subtle error in C
if (<condition>)
<statement1>;
<statement2>;
Now that Go requires a brace block following the if
statement the ()
are redundant. They only serve to help the lexer differentiate between the condition and the statement, otherwise if <condition> <statement>
is hard to parse. (Where does the condition end and the statement begin?)
Now Go's authors have a decision to make:
()
{
to follow the <condition>
They decided redundancy was not desirable. This had a second side effect. Since there is an implicit ;
at every newline, if the {
is on the following line a ;
gets put between the <condition>
and the {
. Go's authors again are faced with a decision:
<condition>; {
constructif ... {
on the same line.<condition>
be on a single line.Special casing the parser is a very bad thing. Look at the speed D and Go parsers compared to C++'s terrible parser performance. Also a uniform style is a good thing. Their ultimate decision is pretty simple given the constraints.