4 ms·
Pardon? The coffeescript site has pretty comprehensive info that describes the syntax. If you don't find a specific example on the site, "it's just Javascript"
by lowboy 14y ago
Pardon? The coffeescript site has pretty comprehensive info that describes the syntax. If you don't find a specific example on the site, "it's just Javascript" has rung true for me in almost every case.
Yes, there is a learning curve and it does things slightly differently. The implicit return value is just something you read once and then integrate. True, function hoisting is lost in cs, but that has never been a problem for me.
- crazygringo 14y agoJust three completely undocumented syntax examples... Mapping values in an object: {a, b} = c Backslash to continue lines: a = long_variable_name \ + other_long variable name Switch statements without a parameter: switch when function_that_needs_to_return_true stuff But the bigger problem is just having no idea how things will parse. For example, this works: a = b + c But this doesn't: a = b + c And then this works: switch a when b, c, d e() But this doesn't (a multi-line form you might want to use if the variable names were really long): switch a when b, c, d e() And this doesn't: switch a when b when c when d e() After trial-and-error, you discover it has to be this, with a seemingly random backslashes: switch a when b, \ c, \ d e() I could go on and on -- but you get the point. The whole language is only discoverable via trial and error. None of this is documented. (Apologies for taking up so much vertical space of the comments!!)
- lowboy 14y ago1) Destructuring assignment: http://coffeescript.org/#destructuring http://coffeescript.org/#destructuring (although they lack an object example). 2) This has to do with the unary plus operator more than just cs - since +varname is an expression, it treats it as such. Fair complaint - I've never run into that. Also, this works just fine if you put the plus on the end of the first line: a = long_var_name + hey_another_var 3) When would you use those? 4+5) Are cases of the unary operator in 2) 6-10) Sure, this is limiting if you want to write switch statements like that. I feel that your coding style is different, or that you're listing edge cases to be contrarian. Coffeescript has a much smaller range of syntax deviations but that's part of what allows it to be so brief and clean.
- esrauch 14y agoHis 1-3 were complaining about undocumented syntax, and the rest about the actual syntax itself. Not that your response is wrong, just that might help you understand what he was saying.
- doublerebel 14y agoMapping values in an object: http://coffeescript.org/#destructuring http://coffeescript.org/#destructuring On backslashes: https://github.com/jashkenas/coffee-script/issues/2457 https://github.com/jashkenas/coffee-script/issues/2457 Basically, if statements are that long, the code should be refactored. This makes it easier to read and reduces the opportunity for bugs. That pattern is one of the main reasons I like CoffeeScript. switch a when b, c, d e() Is clearly explained here: http://coffeescript.org/#switch http://coffeescript.org/#switch
- lowboy 14y agoI think parent's point is that s/he wants b,c,d on different lines if they were long variable names.
- doublerebel 14y agoThat's addressed in the second link. The code should be refactored. condition = (a) -> a in [ b, c, d ] switch when condition(a) e() This is a technique which is already possible in JavaScript, an example (not mine) from 2007: http://saintjohnshawn.com/2007/05/24/javascript-example-switch-statement-using-a-range-of-values/ http://saintjohnshawn.com/2007/05/24/javascript-example-swit...
- crazygringo 14y agoSorry, but that's completely bizarre. The whole point of a switch statement is to be able to test a single value against a list of single values, or groups of single values. The supposed "correct way" you support moves the values outside of the switch statement, which completely destroys reading comprehension of the code. It explodes the number of lines of code necessary. This isn't refactoring, it's complete code obfuscation. It also makes the switch statement itself completely superfluous, since you might as well just do a series of if / else if's, and save an extra line of code. I mean, the whole point of switch is to pass a parameter and compare it against values.
- esrauch 14y agoI'm not so sure the addition one isn't actually also applicable to javascript automatic semicolon insertion. The google js style guide (publicly available) says that all lines must end in an infix operator, opening bracket or semicolon to always avoid accidental semicolon insertion. Though the switch one seems surprising (read: a flaw) since it is usually safe to end a line with a comma in vanilla js.
- ufo 14y agoYou might want to check out this great article on semicolon insertion: http://inimino.org/~inimino/blog/javascript_semicolons http://inimino.org/~inimino/blog/javascript_semicolons Basically, you can almost always remove the semicolons without trouble and more often then not problems occur from semicolons not being inserted then from them being inserted in unexpected positions. The "returning an object literal" case is the only common case where a semicolon is mischeviously inserted.
- esrauch 14y agoI wasn't trying to express a strong stance on the issue, just pointing out what the Google's js style guide says, the + on the next line wouldn't be allowed there (nor .) http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml#Semicolons http://google-styleguide.googlecode.com/svn/trunk/javascript...
- ricardobeat 14y agoa = b + c Line-breaks end statements in CoffeeScript, this is the same as a = b; +c That should be pretty apparent. Your other examples are mostly abuses, and you'll not find "documentation on forbidden syntax" for any other language either. Javascript or Coffeescript shouldn't ever have lines ending with a backslash.
- satyr 14y agoTry: switch a when b , c , d e()