Why aren't colons optional?
Robert Amesz
sheershion at mailexpire.com
Sun Jan 20 13:57:21 EST 2002
Hans Nowak wrote:
> "Edward K. Ream" wrote:
>>
>> Why are colons required after def, elif, else, except, finally,
>> for, if, try and while? One would think the colon would be
>> optional when the colon is followed by a newline.
>>
>> Obviously, colons are required in: ^
>>
>> if a == 1 : b = c
>> elif a == 2 : b = d
>> else : b = e
>>
>> My question is: why isn't the following valid?
> ^
>
> Note the colons in your own post. :-) They are not really
> necessary for understanding what you wrote, but they make
> the sentence easier to read. Same with Python. The colon
> is not necessary for parsing if it's followed by a code
> block, but it increases readability. It's there for
> human readers.
Not _only_ for human readers: some editors/IDEs use trailing colons to
provide automatic indentation. When so, the 'redundant' colon is
actually free, in terms of keystrokes.
>From the point of view of parsing a language, simple rules are better:
parsing is faster and when things go wrong it's easier to come up with
helpful error message (although Python still could use some improvement
in that area).
A particularly horrible example of how *not* to design a language
syntax comes from EcmaScript (formerly: JavaScript, and before that:
LiveScript). As with Java and C, EcmaScript requires that each
statement is terminated by a semicolon, but with a curious exception:
if the semicolon would have been the last character on the line, and
some other conditions are met, the semicolon may be omitted.
What a horrible inconsistency! Worse still, newlines aren't just
whitespace anymore (which is discarded by the lexer) but have become
tokens in their own right. Most of the time those newline-tokens are
meaningless garbage in the token stream, but the grammar still has to
allow for them. What a horrible, horrible mess! And imagine what this
does for the accuracy and helpfulness of any error message, which is
always a concern with parsers.
And all that for... Yes, for what, exactly? To save a few keystrokes?
To satisfy a few script-kiddies who might have started out using
something like Visual Basic and can't adjust to a free-format syntax?
It just makes no sense whatsoever, so it's probably a 'political'
decision. Ugh!
So don't complain or question, but *cherish* the consistency of Python.
It is a great bonus.
Robert Amesz
More information about the Python-list
mailing list