SlideShare a Scribd company logo
CoffeeScript
Vojtěch Grec
▷ It's just JavaScript
▷ Syntaktický cukřík
o Přehlednější a jednodušší zápis
o Usnadnění některých úloh
▷ Kompiluje se 1:1 do JavaScriptu ("Transpiler")
o *.coffee → *.js
▷ Node.js (npm install -g coffee-script)
Co to je?
▷ Jeremy Ashkenas
o Backbone.js, Underscore.js
▷ První commit 13. 12. 2009
▷ v0.5 (21. 2. 2010): kompilátor napsaný v
CoffeeScriptu (místo Ruby)
▷ Od RoR 3.1 (31. 8. 2011) součástí jeho "asset
pipeline"
▷ Inspiroval Brendana Eicha pro ES6
Historie a vývoj
▷ Všechno je výraz
▷ Minimum závorek
▷ Postfixové verze řídicích struktur (Perl)
▷ "Slovní" operátory
▷ Existenční operátor (Ruby)
▷ Třídy
Syntax
▷ Lexical Scoping & Variable Safety
▷ Implicitní return
▷ Pole a objekty
o Slicing, Splicing
▷ Smyčky a Comprehensions
▷ Funkce a generátory
o Splats (...), výchozí hodnoty argumentů
▷ Destructuring Assignments
▷ Chained Comparisons (Python)
▷ Řetězce
o Šablony, bloky
Syntax – vlastnosti
Syntax – ukázka
# Assignment:
number = 42
opposite = true
# Conditions:
number = -42 if opposite
# Functions:
square = (x) -> x * x
# Arrays:
list = [1, 2, 3, 4, 5]
# Objects:
math =
root: Math.sqrt
square: square
cube: (x) -> x * square x
# Splats:
race = (winner, runners...) ->
print winner, runners
# Existence:
alert "I knew it!" if elvis?
# Array comprehensions:
cubes = (math.cube num for num
in list)
(Zdroj: http://coffeescript.org/ – více příkladů tamtéž)
▷ Source maps
▷ <script type="text/coffeescript" />
▷ Literate CoffeeScript
o Markdown + CoffeeScript (*.litcoffee)
o Docco (dokumentační tool)
▷ Cake ("CoffeeScript Make")
Další vlastnosti
▷ Kompilace
o Cakefile/Gulp/Grunt/Maven
o coffee -w
▷ Projekty/firmy
o Dropbox (všechen JS na frontendu)
o GitHub (všechen JS)
 Atom editor
 Hubot
Použití v praxi
▷ TypeScript (Microsoft)
o Především "type"
▷ ECMAScript 6
o Krok správným směrem
o Coffee je ale pohodlnější
▷ Dart (Google)
o Podle Dana Steigerwalda mrtvý
Konkurence
Díky za pozornost!
Otázky?
Vojta Grec
vojtech.grec@keyup.eu

More Related Content

Similar to CoffeeScript

node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
almadcz
 
TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéRené Stein
 
Postgresql na EXT3/4, XFS, BTRFS a ZFS
Postgresql na EXT3/4, XFS, BTRFS a ZFSPostgresql na EXT3/4, XFS, BTRFS a ZFS
Postgresql na EXT3/4, XFS, BTRFS a ZFS
Tomas Vondra
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
Roman Pichlík
 
Ondra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavOndra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavTomáš Holas
 
Český fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyČeský fulltext a sdílené slovníky
Český fulltext a sdílené slovníky
Tomas Vondra
 

Similar to CoffeeScript (7)

node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročné
 
Postgresql na EXT3/4, XFS, BTRFS a ZFS
Postgresql na EXT3/4, XFS, BTRFS a ZFSPostgresql na EXT3/4, XFS, BTRFS a ZFS
Postgresql na EXT3/4, XFS, BTRFS a ZFS
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 
Ondra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavOndra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stav
 
TNPW2-2013-05
TNPW2-2013-05TNPW2-2013-05
TNPW2-2013-05
 
Český fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyČeský fulltext a sdílené slovníky
Český fulltext a sdílené slovníky
 

More from Keyup

Unity
UnityUnity
Unity
Keyup
 
Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.
Keyup
 
WinJS
WinJSWinJS
WinJS
Keyup
 
Redux+React
Redux+ReactRedux+React
Redux+React
Keyup
 
Garbage Collection in Java
Garbage Collection in JavaGarbage Collection in Java
Garbage Collection in Java
Keyup
 
CSS flexbox
CSS flexboxCSS flexbox
CSS flexbox
Keyup
 
Magento 2
Magento 2Magento 2
Magento 2
Keyup
 
Silex
SilexSilex
Silex
Keyup
 
HHVM & Hack
HHVM & HackHHVM & Hack
HHVM & Hack
Keyup
 
Icinga2
Icinga2Icinga2
Icinga2
Keyup
 
O auth2
O auth2O auth2
O auth2
Keyup
 
Úvod do bezpečnosti na webu
Úvod do bezpečnosti na webuÚvod do bezpečnosti na webu
Úvod do bezpečnosti na webu
Keyup
 
Easymock
EasymockEasymock
Easymock
Keyup
 
CSS 3
CSS 3CSS 3
CSS 3
Keyup
 
Contract in Java
Contract in JavaContract in Java
Contract in Java
Keyup
 
Jenkins
JenkinsJenkins
Jenkins
Keyup
 
JLint
JLintJLint
JLint
Keyup
 
Angular js vs. Facebook react
Angular js vs. Facebook reactAngular js vs. Facebook react
Angular js vs. Facebook react
Keyup
 
Optimalizace rychlosti stránek
Optimalizace rychlosti stránekOptimalizace rychlosti stránek
Optimalizace rychlosti stránek
Keyup
 
Integrační testy - Selenium
Integrační testy - SeleniumIntegrační testy - Selenium
Integrační testy - Selenium
Keyup
 

More from Keyup (20)

Unity
UnityUnity
Unity
 
Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.
 
WinJS
WinJSWinJS
WinJS
 
Redux+React
Redux+ReactRedux+React
Redux+React
 
Garbage Collection in Java
Garbage Collection in JavaGarbage Collection in Java
Garbage Collection in Java
 
CSS flexbox
CSS flexboxCSS flexbox
CSS flexbox
 
Magento 2
Magento 2Magento 2
Magento 2
 
Silex
SilexSilex
Silex
 
HHVM & Hack
HHVM & HackHHVM & Hack
HHVM & Hack
 
Icinga2
Icinga2Icinga2
Icinga2
 
O auth2
O auth2O auth2
O auth2
 
Úvod do bezpečnosti na webu
Úvod do bezpečnosti na webuÚvod do bezpečnosti na webu
Úvod do bezpečnosti na webu
 
Easymock
EasymockEasymock
Easymock
 
CSS 3
CSS 3CSS 3
CSS 3
 
Contract in Java
Contract in JavaContract in Java
Contract in Java
 
Jenkins
JenkinsJenkins
Jenkins
 
JLint
JLintJLint
JLint
 
Angular js vs. Facebook react
Angular js vs. Facebook reactAngular js vs. Facebook react
Angular js vs. Facebook react
 
Optimalizace rychlosti stránek
Optimalizace rychlosti stránekOptimalizace rychlosti stránek
Optimalizace rychlosti stránek
 
Integrační testy - Selenium
Integrační testy - SeleniumIntegrační testy - Selenium
Integrační testy - Selenium
 

CoffeeScript

  • 2. ▷ It's just JavaScript ▷ Syntaktický cukřík o Přehlednější a jednodušší zápis o Usnadnění některých úloh ▷ Kompiluje se 1:1 do JavaScriptu ("Transpiler") o *.coffee → *.js ▷ Node.js (npm install -g coffee-script) Co to je?
  • 3. ▷ Jeremy Ashkenas o Backbone.js, Underscore.js ▷ První commit 13. 12. 2009 ▷ v0.5 (21. 2. 2010): kompilátor napsaný v CoffeeScriptu (místo Ruby) ▷ Od RoR 3.1 (31. 8. 2011) součástí jeho "asset pipeline" ▷ Inspiroval Brendana Eicha pro ES6 Historie a vývoj
  • 4. ▷ Všechno je výraz ▷ Minimum závorek ▷ Postfixové verze řídicích struktur (Perl) ▷ "Slovní" operátory ▷ Existenční operátor (Ruby) ▷ Třídy Syntax
  • 5. ▷ Lexical Scoping & Variable Safety ▷ Implicitní return ▷ Pole a objekty o Slicing, Splicing ▷ Smyčky a Comprehensions ▷ Funkce a generátory o Splats (...), výchozí hodnoty argumentů ▷ Destructuring Assignments ▷ Chained Comparisons (Python) ▷ Řetězce o Šablony, bloky Syntax – vlastnosti
  • 6. Syntax – ukázka # Assignment: number = 42 opposite = true # Conditions: number = -42 if opposite # Functions: square = (x) -> x * x # Arrays: list = [1, 2, 3, 4, 5] # Objects: math = root: Math.sqrt square: square cube: (x) -> x * square x # Splats: race = (winner, runners...) -> print winner, runners # Existence: alert "I knew it!" if elvis? # Array comprehensions: cubes = (math.cube num for num in list) (Zdroj: http://coffeescript.org/ – více příkladů tamtéž)
  • 7. ▷ Source maps ▷ <script type="text/coffeescript" /> ▷ Literate CoffeeScript o Markdown + CoffeeScript (*.litcoffee) o Docco (dokumentační tool) ▷ Cake ("CoffeeScript Make") Další vlastnosti
  • 8. ▷ Kompilace o Cakefile/Gulp/Grunt/Maven o coffee -w ▷ Projekty/firmy o Dropbox (všechen JS na frontendu) o GitHub (všechen JS)  Atom editor  Hubot Použití v praxi
  • 9. ▷ TypeScript (Microsoft) o Především "type" ▷ ECMAScript 6 o Krok správným směrem o Coffee je ale pohodlnější ▷ Dart (Google) o Podle Dana Steigerwalda mrtvý Konkurence
  • 10. Díky za pozornost! Otázky? Vojta Grec vojtech.grec@keyup.eu