35

Develconf coffeescript

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Develconf coffeescript
Page 2: Develconf coffeescript

NSFW!

Prezentace obsahuje sprostá

slova

Page 3: Develconf coffeescript

• Syntaktický cukr• Čitelný kód• Strukturování kódu odsazením

FUJ!

Page 4: Develconf coffeescript

Pochybuji, že se CoffeeScript ujme. Vlastně nepochybuji, jsem si zcela jist, neujme se, protože ekosystém. Široká audience nikdy CoffeeScript nepřijme, protože nejsou příklady, nejsou editory, nejsou code syntax highlightery, nejsou debuggery, nejsou přátelé na IM, prostě CoffeeScript je v ekosystému RIA aplikací vetřelec. Syntax pro rychlejší a přehlednější psaní js není to podstatné, ač jsem si sám dlouho myslel opak, co rozhoduje. Je smutné, když někdo investuje svůj čas do reimplementace ko la…DANIEL STEIGERWALD, 5.12.2010

Page 5: Develconf coffeescript

Coffeescript je především krásný. Nejde jen o to ušetřit si pár znaků při psaní kódu, ale hlavně ulevit očím při jeho čtení. Coffeescript je chytrý. Je tu elegantní a strohá definice třídy, skrze klíčové slovo class. Že všechno je v Coffeescriptu výraz. A že už nikdy nemusím přemýšlet, zdali iterovat pomocí for in, nebo $.each. A nikdy už volat bind jen proto, že chci užít closure a zachovat this. Použitelné nástroje existují, a každý den se rodí nové. (…)

DANIEL STEIGERWALD, 19.8.2011

Page 6: Develconf coffeescript
Page 7: Develconf coffeescript

SYNTAX

Page 8: Develconf coffeescript

dvojmoc = (x) -> x * x

soucet = (xs) ->

r = 0

(r = r + x) for x in xs

r

console.log dvojmoc 5

console.log soucet [1, 3, 3, 7]

FUNKCE ->

Page 9: Develconf coffeescript

vnejsi = 1

funkce = ->

vnitrni = 2

vnejsi = 3

vnitrni = funkce()

PROMĚNNÉ BEZ VAR

Page 10: Develconf coffeescript

"Třikrát pět je #{3 * 5}" //vyčíslí

'Třikrát pět je #{3 * 5}' //nevyčíslí

html = '''

<strong>

CoffeeScript!

</strong>

'''

ŘETĚZCE

Page 11: Develconf coffeescript

znalosti =

php:

uroven: "pokrocily"

praxe: 8

html:

uroven: "zacatecnik"

praxe: 3

POLE A OBJEKTY

Page 12: Develconf coffeescript

if zima then zatop()

if zima

zatop()

zatop() if zima

zatop() unless teplo

kotel = if teplo then "off" else "on"

optimum = 18 < teplota < 23

PODMÍNKY – IF, UNLESS

Page 13: Develconf coffeescript

options or= defaults

//JS: options || (options = defaults);

unless odpoved? then odpoved = 42

//JS:

if (typeof odpoved === "undefined" || odpoved === null) {

odpoved = 42;

}

PODMÍNĚNÉ PŘIŘAZENÍ

Page 14: Develconf coffeescript

while not file.EOF

read file

read file until file.EOF

radky = readln file until file.EOF

CYKLY

Page 15: Develconf coffeescript

radky = readln file until file.EOF

kotel = if teplo then "off" else "on"

dvojmoc = (x) -> x*x

dvojmoci = (dvojmoc(x) for x in [1..5])

VŠE JE VÝRAZ!

Page 16: Develconf coffeescript

dvojmoci = (dvojmoc(x) for x in [1..5])

for jmeno in jmena

alert jmeno

alert property for property of window

alert (property for property of window)

for key, value of database

for all key, value of database

SMYČKA FOR

Page 17: Develconf coffeescript

[1..5] [1, 2, 3, 4, 5]

[1...5] [1, 2, 3, 4]

[5..1] [5, 4, 3, 2, 1]

[1..100] iterační funkce

ROZSAHY [..]

Page 18: Develconf coffeescript

fn = (a, b...) -> čňčňčňčň

fn 10, 20, 30, 40 // a=10, b=[20, 30, 40]

fn = (a, b..., c) -> čňčňčňčň

fn 10, 20, 30, 40 // a=10, b=[20, 30], c=40

par = [10,20,30,40]

fn par // a=[10,20,30,40]

fn par... // a=10, b=[20, 30], c=40

VÝPUSTKA (SPLAT) …

Page 19: Develconf coffeescript

miry = ->

[90, 60, 90]

[prsa, pas, boky] = miry()

[a, b] = [b, a]

pole = [3,1,4,1,5]

[prvni, telo..., posledni] = pole

DESTRUKTUROVANÉ PŘIŘAZENÍ

Page 20: Develconf coffeescript

TŘÍDY

Page 21: Develconf coffeescript

class Prednasejici

honorar: 0

_wtf: true

ja = new Prednasejici

alert ja.honorar

TŘÍDA

Page 22: Develconf coffeescript

class Prednasejici

constructor: (jmeno) -> this.jmeno=jmeno

honorar: 0

ja = new Prednasejici("Martin")

alert ja.jmeno

KONSTRUKTOR

Page 23: Develconf coffeescript

class Prednasejici

constructor: (jmeno) -> @jmeno=jmeno

honorar: 0

ja = new Prednasejici("Martin")

alert ja.jmeno

@PROPERTY

Page 24: Develconf coffeescript

class Prednasejici

constructor: (@jmeno) ->

honorar: 0

ja = new Prednasejici("Martin")

alert ja.jmeno

@PROPERTY, VOL. 2

Page 25: Develconf coffeescript

class DrzyPrednasejici extends Prednasejici

honorar: "Jidlo"

ja = new DrzyPrednasejici("Martin")

alert ja.honorar

DĚDIČNOST

Page 26: Develconf coffeescript

Array::map = -> čňčňčň

PŘÍSTUP K PROTOTYPU ::

Page 27: Develconf coffeescript

PRO A PROTI

Page 28: Develconf coffeescript

Významotvorná mezera

prefix = "prvek_"

id1 = prefix + 12 /// == prvek_12

id2 = prefix +12 /// TypeError

id2 = prefix(+12)

PROBLÉMY

Page 29: Develconf coffeescript

Asociativita operátorů

console.log (fn 3, fn 4)

console.log (fn (3, fn 4))

console.log fn (3), fn (4)

PROBLÉMY

Page 30: Develconf coffeescript

Porovnání je vždy typové

var a = 0, b = '', c = '0';

a == b; // true

a == c; // true

b == c; // false

CoffeeScript překládá == na ===

PROBLÉMY

Page 31: Develconf coffeescript

Interaktivní konzole na coffeescript.org

Dialekty – Iced CoffeeScript (await, defer)

CoffeeScript Redux – „source maps“

Pluginy pro editory

Knihovny

transpilery

„A TO JE VŠECHNO?“ VOL. 1

Page 32: Develconf coffeescript

Čistý kód

Správné JS konstrukce

Robustní JS kód (vč. JSLint)

Čitelný kód

„A TO JE VŠECHNO?“ VOL. 2

Page 33: Develconf coffeescript

„Literate CoffeeScript“ (od verze 1.5)

Zápis kódu do dokumentu v Markdown – kód je součást svojí dokumentace

„A TO JE VŠECHNO?“ BONUS

Page 34: Develconf coffeescript

MATERIÁL KE STUDIU:UTFG!

Page 35: Develconf coffeescript