Monday 8 March 2010

mmmm ... CoffeeScript

The most commonly used programming language in the world today, certainly within the browse, JavaScript superficially resembles the Java programming language in its syntax, but at deeper levels it owes far more to lesser-known languages, such as Scheme and Self.

The Java part of the name and syntax apparently came about as a result of a decree from Marketing that Java was the next hot thing, and inventor Brendan Eich worked feverishly to swiftly put a Java-esque sheen over the top.  This, plus the cutesy name, helped mislead a lot of people for a lot years into thinking that it was a toy scripting language, and only with the more recent success of AJAX has its underlying power come to the fore.

And yet we are still burdened with the clunky syntax.

However, CoffeeScript promises to change that, with a new, lightweight syntax for JavaScript that owes a fair bit to Python and Ruby syntaxes, and a lot to experience with JavaScript.  An example:

# Uses a binary search algorithm to locate a value in the specified array.
binary_search: (items, value) ->
 
  start: 0
  stop: items.length - 1
  pivot: Math.floor((start + stop) / 2)
 
  while items[pivot] isnt value and start < stop
 
    # Adjust the search area.
    stop: pivot - 1 if value < items[pivot]
    start: pivot + 1 if value > items[pivot]
 
    # Recalculate the pivot.
    pivot: Math.floor((stop + start) / 2)
 
  # Make sure we've found the correct value.
  if items[pivot] is value then pivot else -1
 
 
# Test the function.
puts(2 is binary_search([10, 20, 30, 40, 50], 30))
puts(4 is binary_search([-97, 35, 67, 88, 1200], 1200))
puts(0 is binary_search([0, 45, 70], 0))
puts(-1 is binary_search([0, 45, 70], 10))

At time of writing CoffeeScript is only up to version 0.5.5, and syntax is not guaranteed to stabilize until 1.0, but IMO it's well worth a look.

P.S. A neat little blog post about CoffeeScript (with short examples) from Thomas Reynolds.

P.P.S. There are similar tools/nicer syntaxes for HTML (HAML), and CSS (Sass).

2 comments:

Andi said...

But you hate coffee!!

Dan Prager said...

True, but don't tell anyone!