Hacker News new | ask | show | jobs
by inimino 3136 days ago
K&R braces have approximately nothing to do with semicolon insertion...
2 comments

Compare the values of these function bodies:

    return {
    };
and

    return
    {
    };
Yes, those are different, but K&R brace is a style of where you put the braces in a function body or a block. The braces in your example are creating an object literal.

The K&R brace style is not about putting an object literal on the same line with a return statement or on another line, but about how control structures are formatted.

The reason I said that K&R brace style has nothing to do with semicolon insertion is that it’s possible to write all your control structures with K&R braces and still be bitten by the places in the grammar where line breaks are not allowed, like after a return statement, if you’re unaware of it.

It’s also possible to use Allman braces everywhere and never have that problem with return statements.

That is a better example, thanks. I make no claims to JS guru-dom!
if(foo) <- js can insert semicolon there

if(foo) { <- js cannot insert semicolon there

Edit: add this comment you have provided approximately nothing in support of your assertion, you can and should do better. I note this thread is JS and a whole lot of this kind of thing going on here I don't usually see elsewhere on HN. It's a shame, discussion is useful to learn things I don't already know. "Nyer, your wrong" not so useful to me, you or anyone else.

No, JS will never never insert a semicolon after “if(foo)” no matter what comes after it. Putting the braces on your control structures on the same or the next lines has no interaction whatsoever with the semicolon insertion rules.

I’ve written a ridiculously detailed blog post about automatic semicolon insertion if you want to know all the specifics.

http://inimino.org/~inimino/blog/javascript_semicolons

There's a similar pattern in Go's semicolon insertion, although I think the exact rules differ.