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

CoffeeScript Intro

CoffeeScript Intro

An intro to coffeescript and comparison to javascript.

Avatar for David Newell

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/