9 ms·
K&R braces have approximately nothing to do with semicolon insertion...
by inimino 9y ago
K&R braces have approximately nothing to do with semicolon insertion...
- harry8 9y agoif(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.
- 0xcde4c3db 9y agoThere's a similar pattern in Go's semicolon insertion, although I think the exact rules differ.
- inimino 9y agoNo, 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 http://inimino.org/~inimino/blog/javascript_semicolons
- krallja 9y agoCompare the values of these function bodies: return { }; and return { };
- harry8 9y agoThat is a better example, thanks. I make no claims to JS guru-dom!
- inimino 9y agoYes, 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.