Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CoffeeScript Intro

CoffeeScript Intro

An intro to coffeescript and comparison to javascript.

David Newell

March 22, 2013
Tweet

More Decks by David Newell

Other Decks in Programming

Transcript

  1. Installation $ npm install -g coffee-script -- OR -- $

    https://github.com/jashkenas/coffee-script.git $ sudo bin/cake install -- THEN -- $ coffee -v
  2. Editors with CoffeeScript Extensions •TextMate •Vim •Emacs •gedit •jEdit •IntelliJ

    IDEA •IntelliJ RubyMine 4 •NetBeans •Eclipse •Cloud9
  3. Hello World console.log 'hello world' $coffee -c hello.coffee (function() {

    console.log('hello world'); }).call(this); console.log 'hello world' $coffee -c --bare hello.coffee console.log('hello world');
  4. Functions greeting = (subject) -> "Hello #{subject}" console.log greeting "CSNY"

    ======================== var greeting; greeting = function(subject) { return "Hello " + subject; }; console.log(greeting("CSNY"));
  5. Conditionals if typeof 5 is 'number' console.log '5 is odd'

    unless 5 % 2 == 1 else throw '5 is not a number' ======================== if (typeof 5 === 'number') { if (5 % 2 !== 1) { console.log('5 is odd'); } } else { throw '5 is not a number'; }
  6. Fat Arrow save: -> client.open (err, p_client) => client.collection 'worker',

    @add ======================== var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; (function() { return client.open(__bind(function(err, p_client) { return client.collection('worker', add); }, this)); });
  7. Arguments (first = 1, rest...) -> ======================== (function() { var

    first, rest; first = arguments[0], rest = 2 <= arguments.length ? __slice. call(arguments, 1) : []; if (first == null) { first = 1; }
  8. JSON delta = '\u3094' greekUnicode = {delta} ======================== var delta,

    greekUnicode; delta = '\u3094'; greekUnicode = { delta: delta };
  9. Destructuring Assignment metaLanguages = javascript: coffeescript: ["Jeremy", "Ashkenas"] {javascript: {coffeescript:

    [first, last]}} = metaLanguages ======================== metaLanguages = { javascript: { coffeescript: ["Jeremy", "Ashkenas"] } }; _ref = metaLanguages.javascript.coffeescript, first = _ref[0], last = _ref[1];
  10. Comprehensions for a in [0..10] by 2 when a %

    3 == 0 ======================== var a, _step; for (a = 0, _step = 2; a <= 10; a += _step) { if (a % 3 === 0) { console.log(a); } }
  11. Existential Operator variable? variable ?= "A value" ======================== typeof variable

    !== "undefined" && variable !== null; if (typeof variable !== "undefined" && variable !== null) { variable; } else { variable = "A value"; };
  12. var Snake; var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent)

    { for (var key in parent) { if (__hasProp.call(parent, key)) child [key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; }; Snake = (function() { __extends(Snake, Animal); function Snake(noise) { this.noise = noise; Snake.__super__.constructor.call(this, this.animal); Animal.prototype.noise(); } return Snake;
  13. Watch Out! printing = -> console.log "Watch this" console.log printing

    printing() $coffee printing.coffee [Function] Watch this
  14. More Info -- Main Site -- http://jashkenas.github.com/coffee-script/ -- Little Book

    on CoffeeScript -- http://arcturo.github.com/library/coffeescript/ -- Smooth-CoffeeScript -- http://autotelicum.github.com/Smooth-CoffeeScript/ -- CoffeeScript Koans -- http://cskoans.herokuapp.com/
  15. Questions -- CoffeeScript Meetup -- http://www.meetup.com/Coffee-Script-New-York/ -- Code and Slides

    -- https://github.com/rustedgrail/CoffeeScript-Intro -- CoffeeScript and Node Tower Defense -- http://qqtd.herokuapp.com/