Upload
martin-maly
View
1.204
Download
4
Embed Size (px)
DESCRIPTION
Citation preview
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!