develconf coffeescript

Post on 23-Dec-2014

1.204 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

NSFW!

Prezentace obsahuje sprostá

slova

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

FUJ!

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

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

SYNTAX

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 ->

vnejsi = 1

funkce = ->

vnitrni = 2

vnejsi = 3

vnitrni = funkce()

PROMĚNNÉ BEZ VAR

"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

znalosti =

php:

uroven: "pokrocily"

praxe: 8

html:

uroven: "zacatecnik"

praxe: 3

POLE A OBJEKTY

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

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Í

while not file.EOF

read file

read file until file.EOF

radky = readln file until file.EOF

CYKLY

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!

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

[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 [..]

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) …

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Í

TŘÍDY

class Prednasejici

honorar: 0

_wtf: true

ja = new Prednasejici

alert ja.honorar

TŘÍDA

class Prednasejici

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

honorar: 0

ja = new Prednasejici("Martin")

alert ja.jmeno

KONSTRUKTOR

class Prednasejici

constructor: (jmeno) -> @jmeno=jmeno

honorar: 0

ja = new Prednasejici("Martin")

alert ja.jmeno

@PROPERTY

class Prednasejici

constructor: (@jmeno) ->

honorar: 0

ja = new Prednasejici("Martin")

alert ja.jmeno

@PROPERTY, VOL. 2

class DrzyPrednasejici extends Prednasejici

honorar: "Jidlo"

ja = new DrzyPrednasejici("Martin")

alert ja.honorar

DĚDIČNOST

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

PŘÍSTUP K PROTOTYPU ::

PRO A PROTI

Významotvorná mezera

prefix = "prvek_"

id1 = prefix + 12 /// == prvek_12

id2 = prefix +12 /// TypeError

id2 = prefix(+12)

PROBLÉMY

Asociativita operátorů

console.log (fn 3, fn 4)

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

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

PROBLÉMY

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

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

Čistý kód

Správné JS konstrukce

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

Čitelný kód

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

„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

MATERIÁL KE STUDIU:UTFG!

top related