Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CoffeeScript Intro
Search
David Newell
March 22, 2013
Programming
2
94
CoffeeScript Intro
An intro to coffeescript and comparison to javascript.
David Newell
March 22, 2013
Tweet
Share
More Decks by David Newell
See All by David Newell
Git and Hg
rustedgrail
1
88
Other Decks in Programming
See All in Programming
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
600
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
240
rage against annotate_predecessor
junk0612
0
170
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
170
私の後悔をAWS DMSで解決した話
hiramax
4
210
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2.4k
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
180
Cache Me If You Can
ryunen344
2
1.5k
🔨 小さなビルドシステムを作る
momeemt
4
680
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
540
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
310
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Making Projects Easy
brettharned
117
6.4k
Designing for Performance
lara
610
69k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
YesSQL, Process and Tooling at Scale
rocio
173
14k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Navigating Team Friction
lara
189
15k
Writing Fast Ruby
sferik
628
62k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Transcript
CoffeeScript "It's just JavaScript"
Installation $ npm install -g coffee-script -- OR -- $
https://github.com/jashkenas/coffee-script.git $ sudo bin/cake install -- THEN -- $ coffee -v
Editors with CoffeeScript Extensions •TextMate •Vim •Emacs •gedit •jEdit •IntelliJ
IDEA •IntelliJ RubyMine 4 •NetBeans •Eclipse •Cloud9
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');
Functions greeting = (subject) -> "Hello #{subject}" console.log greeting "CSNY"
======================== var greeting; greeting = function(subject) { return "Hello " + subject; }; console.log(greeting("CSNY"));
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'; }
Context setName = (@name) -> ======================== var setName; setName =
function(name) { return this.name = name; };
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)); });
Arguments (first = 1, rest...) -> ======================== (function() { var
first, rest; first = arguments[0], rest = 2 <= arguments.length ? __slice. call(arguments, 1) : []; if (first == null) { first = 1; }
JSON delta = '\u3094' greekUnicode = {delta} ======================== var delta,
greekUnicode; delta = '\u3094'; greekUnicode = { delta: delta };
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];
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); } }
Existential Operator variable? variable ?= "A value" ======================== typeof variable
!== "undefined" && variable !== null; if (typeof variable !== "undefined" && variable !== null) { variable; } else { variable = "A value"; };
Classes class Snake extends Animal constructor: (@noise) -> super() Animal::bark()
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;
Watch Out! printing = -> console.log "Watch this" console.log printing
printing() $coffee printing.coffee [Function] Watch this
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/
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/