davideisinger.com

My personal website
Log | Files | Refs | README

commit 32c72739a3309332be0676bd16593adbae7191ca
parent e89087a524e1b27a9b3af522669aec5df57603b1
Author: David Eisinger <[email protected]>
Date:   Tue, 24 Oct 2023 22:33:06 -0400

un-bro

Diffstat:
Dcontent/elsewhere/coffeescript-for-ruby-bros/index.md | 89-------------------------------------------------------------------------------
Acontent/elsewhere/coffeescript-for-ruby-friends/index.md | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 89 deletions(-)

diff --git a/content/elsewhere/coffeescript-for-ruby-bros/index.md b/content/elsewhere/coffeescript-for-ruby-bros/index.md @@ -1,89 +0,0 @@ ---- -title: "CoffeeScript for Ruby Bros" -date: 2010-08-06T00:00:00+00:00 -draft: false -canonical_url: https://www.viget.com/articles/coffeescript-for-ruby-bros/ ---- - -Hello there, Ruby friend. You've perhaps heard of -[CoffeeScript](https://jashkenas.github.com/coffee-script/), -"JavaScript's less ostentatious kid brother," but it might *as yet* be -unclear why you'd want to stray from Ruby's loving embrace. Well, -friend, I've been playing with it off-and-on for the past few months, -and I've come to the following conclusion: **CoffeeScript combines the -simplicity of Javascript with the elegance of Ruby.** - -## Syntax - -Despite its compactness as a language, Javascript has always felt a bit -noisy to me. Its excessive punctuation is pretty much the only thing it -has in common with its namesake. CoffeeScript borrows from the syntaxes -of Ruby and Python to create a sort of minimalist Javascript. From -Python, we get significant whitespace and list comprehensions. - -Otherwise, it's all Ruby: semicolons and parentheses around function -arguments are entirely optional. Like Ruby's `||=`, conditional -assignment is handled with `?=`. Conditionals can be inlined -(`something if something_else`). And every statement has an implicit -value, so `return` is unnecessary. - -## Functions - -Both Javascript and Ruby support functional programming. Ruby offers -numerous language features to make functional programming as concise as -possible, the drawback being the sheer number of ways to define a -function: at least six, by my count (`def`, `do/end`, `{ }`, `lambda`, -`Proc.new`, `proc`). - -At the other extreme, Javascript offers but one way to define a -function: the `function` keyword. It's certainly simple, but especially -in callback-oriented code, you wind up writing `function` one hell of a -lot. CoffeeScript gives us the `->` operator, combining the brevity of -Ruby with the simplicity of Javascript: - -```coffeescript -thrice: (f) -> - f() - f() - f() - -thrice -> puts "OHAI" -``` - -Which translates to: - -```javascript -(function(){ - var thrice; - - thrice = function(f) { - f(); - f(); - return f(); - }; - - thrice(function() { return puts("OHAI"); }); -})(); -``` - -I'll tell you what that is: MONEY. Money in the BANK. - -## It's Node - -Though not dependent upon it, CoffeeScript is built to run on top of -[Node.js](http://nodejs.org/). This means you can take advantage of all -the incredible work people are doing with Node, including the -[Express](http://expressjs.com/) web framework, the [Redis Node -Client](https://github.com/fictorial/redis-node-client), and -[Connect](https://github.com/senchalabs/connect), a middleware framework -along the lines of [Rack](http://rack.rubyforge.org/). What's more, its -integration with Node allows you to run CoffeeScript programs from the -command line just like you would Ruby code. - -CoffeeScript is an exciting technology, as both a standalone language -and as a piece of a larger Node.js toolkit. Take a look at -[Defer](http://gfxmonk.net/2010/07/04/defer-taming-asynchronous-javascript-with-coffeescript.html) -to see what the language might soon be capable of, and if you're -participating in this year's [Node.js -Knockout](http://nodeknockout.com/), watch out for the -[Rocketpants](http://nodeknockout.com/teams/2eb41a4c31f50c044a280000). diff --git a/content/elsewhere/coffeescript-for-ruby-friends/index.md b/content/elsewhere/coffeescript-for-ruby-friends/index.md @@ -0,0 +1,89 @@ +--- +title: "CoffeeScript for Ruby Friends" +date: 2010-08-06T00:00:00+00:00 +draft: false +canonical_url: https://www.viget.com/articles/coffeescript-for-ruby-friends/ +--- + +Hello there, Ruby friend. You've perhaps heard of +[CoffeeScript](https://jashkenas.github.com/coffee-script/), +"JavaScript's less ostentatious kid brother," but it might *as yet* be +unclear why you'd want to stray from Ruby's loving embrace. Well, +friend, I've been playing with it off-and-on for the past few months, +and I've come to the following conclusion: **CoffeeScript combines the +simplicity of Javascript with the elegance of Ruby.** + +## Syntax + +Despite its compactness as a language, Javascript has always felt a bit +noisy to me. Its excessive punctuation is pretty much the only thing it +has in common with its namesake. CoffeeScript borrows from the syntaxes +of Ruby and Python to create a sort of minimalist Javascript. From +Python, we get significant whitespace and list comprehensions. + +Otherwise, it's all Ruby: semicolons and parentheses around function +arguments are entirely optional. Like Ruby's `||=`, conditional +assignment is handled with `?=`. Conditionals can be inlined +(`something if something_else`). And every statement has an implicit +value, so `return` is unnecessary. + +## Functions + +Both Javascript and Ruby support functional programming. Ruby offers +numerous language features to make functional programming as concise as +possible, the drawback being the sheer number of ways to define a +function: at least six, by my count (`def`, `do/end`, `{ }`, `lambda`, +`Proc.new`, `proc`). + +At the other extreme, Javascript offers but one way to define a +function: the `function` keyword. It's certainly simple, but especially +in callback-oriented code, you wind up writing `function` one hell of a +lot. CoffeeScript gives us the `->` operator, combining the brevity of +Ruby with the simplicity of Javascript: + +```coffeescript +thrice: (f) -> + f() + f() + f() + +thrice -> puts "OHAI" +``` + +Which translates to: + +```javascript +(function(){ + var thrice; + + thrice = function(f) { + f(); + f(); + return f(); + }; + + thrice(function() { return puts("OHAI"); }); +})(); +``` + +I'll tell you what that is: MONEY. Money in the BANK. + +## It's Node + +Though not dependent upon it, CoffeeScript is built to run on top of +[Node.js](http://nodejs.org/). This means you can take advantage of all +the incredible work people are doing with Node, including the +[Express](http://expressjs.com/) web framework, the [Redis Node +Client](https://github.com/fictorial/redis-node-client), and +[Connect](https://github.com/senchalabs/connect), a middleware framework +along the lines of [Rack](http://rack.rubyforge.org/). What's more, its +integration with Node allows you to run CoffeeScript programs from the +command line just like you would Ruby code. + +CoffeeScript is an exciting technology, as both a standalone language +and as a piece of a larger Node.js toolkit. Take a look at +[Defer](http://gfxmonk.net/2010/07/04/defer-taming-asynchronous-javascript-with-coffeescript.html) +to see what the language might soon be capable of, and if you're +participating in this year's [Node.js +Knockout](http://nodeknockout.com/), watch out for the +[Rocketpants](http://nodeknockout.com/teams/2eb41a4c31f50c044a280000).