Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Kaffeine: další povzbuzení pro javascriptaře

Káva je, a to i v naší anketě, jednou z nejpopulárnějších povzbuzovacích metod mezi programátory (populárnější je jen „spánek“). Snad i proto se v nejrůznějších podobách objevuje v názvech knihoven a programovacích jazyků. Ani dnešní nástroj není výjimka. Je opravdu povzbuzením pro JavaScriptaře?

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Pro některé čtenáře byla syntax CoffeeScriptu možná až příliš radikální. Všechno to odsazování, a hlavně chybějící složené závorky, no fuj… Pokud hledáte nějaký vylepšený JavaScript, který by nebořil vaše zažité představy o tom, co musí mít programovací jazyk, zkuste Kaffeine.

Mírný pokrok v mezích zákona

Kaffeine (zdrojové kódy na GitHubu) nemění zvyklosti z JavaScriptu. Pokud napíšete čistý JS a proženete ho kompilerem Kaffeinu, nestane se s ním nic. Kaffeine pouze rozšiřuje některé možnosti, přináší nové konstrukce, a hlavně: Mezery nenesou žádný syntaktický ani sémantický význam.

Opět jde o nástroj, určený a připravený pro Node.js. Usnadňuje tedy především práci s moduly, a některým programátorům usnadní i psaní asynchronního kódu. Především pak přináší míň psaní.

Řetězce přes víc řádků

Zapsat víceřádkový řetězec v Kaffeine je snadné – příklad vše objasní:

html = "
<head>
<title>Stránka</title>
<body>
<h1>Stránka</h1>
</body>
<html>
"

Po překladu bude výsledek

var html;
html = "\n\
<head>\n\
<title>Stránka</title>\n\
<body>\n\
<h1>Stránka</h1>\n\
</body>\n\
<html>\n\
"

Jak vidíte, překladač zachoval konce řádků. Pokud se chceme takovému chování vyhnout, můžeme prostě každý řádek ukončit zpětným lomítkem.

Výrazy v řetězcích

Jako v Coffeescriptu nebo Ruby: zápis #{výraz} v řetězci zkracuje konstrukci  ..." + výraz + "...

Implicitní kdeco…

Ve snaze ušetřit programátorům zbytečné psaní nabízí Kaffeine spoustu možností: vynechat středníky, závorky, klíčové slovo var. Překladač se postará o správnou deklaraci, např. v následujícím případu:

x = 0
{
x = 1
y = 2
}

Překladač uzavře blok do funkce. Existující proměnné ponechá jako globální, ale ty, které se v bloku vyskytnou poprvé, nadeklaruje jako lokální:

var x;
x = 0
function() {
  var y;
  x = 1
  return y = 2
}

Kaffeine doplní i závorky k volání funkce (tedy pokud jsou předány parametry) a správně vnoří:

//funkce1 funkce2 parametr
funkce1(funkce2(parametr))
//funkce parametr1, parametr2
funkce(parametr1, parametr2)

Stejně tak lze vynechat závorky u podmínek (while, if) či u konstrukce for:

for i in A
if name == "john", return false
while i>0 { cosi... }

Implicitní return dovoluje vynechat slovo return, pokud chcete vrátit poslední vyhodnocený výraz. Implicitní function zase dovoluje vynechat slovo function:

// x = (a) {a*2}
// bude přeloženo jako:
var x;
x = function(a) {return a*2}

Bang! Bang!

Některým programátorům dělá problém vnímat, že některé JavaScriptové konstrukce jsou asynchronní, a že vykonávání programu nebude pokračovat dalším příkazem až PO dokončení asynchronní operace (AJAX), ale hned, že tedy pokračování svých geniálních algoritmů musí umístit do callback obsluhy, která se spustí po dokončení operace.

Kaffeine nabízí právě pro takové programátory vykřičníkovou konstrukci Bang!, která zbytek kódu za voláním asynchronní funkce uzavře do anonymní funkce a předá ji jako callback:

vysledek = $.get!('/ajax.php')
if vysledek != 'OK', alert(vysledek)

Překlad:

$.get('/ajax.php', function(vysledek) {
  if(vysledek != 'OK') alert(vysledek)
})

Názory na vhodnost podobné konstrukce se mohou lišit, pravdou zůstává, že v mnohých případech pomůže snazšímu pochopení i zápisu kódu, obzvlášť při vnořených asynchronních operacích.

@This

Obdobně jako v CoffeeScriptu je i v Kaffeine zavináč zkratkou pro this, a stejně jako v CfS si i v Kaffeine udržuje kontext.

Funkce

Kromě výše uvedených zjednodušení, jako je implicitní return a implicitní function, nabízí Kaffeine i další zjednodušení pro funkce. Jedním z nich jsou anonymní (nepojmenované) argumenty:

dvojnasobek = {# * 2}
mocnina = {# * #}
soucin = {# * #1}

# zastupuje parametr funkce. #1 pak druhý parametr, #2 třetí apod. Výsledný kód bude:

dvojnasobek = function() {return arguments[0] * 2}
mocnina = function() {return arguments[0] * arguments[0]}
soucin = function() {return arguments[0] * arguments[1]}

Pipe

Z *nixů vám bude jistě známý způsob řetězení volání pomocí znaku | (pipe). Kaffeine nabízí něco podobného:

hodnota = vstup | funkce parametr
vysledek = a1, a2 | funkce 1 par1 | funkce 2 par1, par 2 | funkce 3 parametr
var hodnota, vysledek;
hodnota = __.funkce.call(this, vstup, parametr)
vysledek = __.funkce.call(this, a1, a2, 1(__.funkce.call(this, par1, 2(par1, par(__.funkce.call(this, 2, 3(parametr)))))))

Výchozí hodnoty parametrů

Příjemný syntaktický cukr nabízí Kaffeine v podobě defaultních hodnot parametrů funkce, jako v jiných jazycích:

//f = (a=20, b, c=10) {a+b+c}
f = function(a, b, c) {
  a = a == null ? 20 : a, c = c == null ? 10 : c;return a+b+c}

Operátory

Kaffeine nabízí i nové operátory přiřazení: ||=.=

//location.href .= replace("?old", "?new")
location.href = location.href.replace("?old", "?new")
//name .= toUpperCase()
name = name.toUpperCase()
//opts ||= {}
opts = opts || {}

Třetí nový operátor je operátor rozšíření: ←

options = options <- { size: "small", num: 10}

Překlad je o něco složitější, definuje funkci extends(), a výsledkem je sloučení (mixin) dvou objektů:

var options;
options = __extend(options, { size: "small", num: 10})
function __extend(a,b) {
  var c = {}, i;
  a = a || {};
  for(i in a) c[i] = a[i];
  for(i in b) c[i] = b[i];
  return c;
}

Závěr

Pro použití Kaffeine platí víceméně totéž co pro CoffeeScript: Používejte to, pokud chcete a pokud vám to pomůže. Překladač je napsaný v JavaScriptu, takže bude fungovat v prohlížeči i v Node.js.

Martin Malý

Martin Maly

Začal programovat v roce 1984 s progra­movatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď je rád, že neprogramuje…

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Přehled názorů

no nevím
oj 15. 12. 2010 08:00
Nový
└ 
Re: no nevím
blizzboz 15. 12. 2010 16:51
Nový
 
└ 
Re: no nevím
Bronislav Klučka 16. 12. 2010 11:00
Nový
 
 
├ 
Re: no nevím
pas 16. 12. 2010 13:48
Nový
 
 
│
└ 
Re: no nevím
Bronislav Klučka 16. 12. 2010 17:11
Nový
 
 
│
 
├ 
Re: no nevím
pas 16. 12. 2010 17:52
Nový
 
 
│
 
└ 
Re: no nevím
pas 16. 12. 2010 17:58
Nový
 
 
└ 
Re: no nevím
blizzboz 18. 12. 2010 03:06
Nový
 
 
 
├ 
Re: no nevím
blizzboz 18. 12. 2010 03:13
Nový
 
 
 
└ 
Re: no nevím
Jiří Knesl 20. 12. 2010 13:11
Nový
 
 
 
 
├ 
Re: no nevím
Bronislav Klučka 20. 12. 2010 13:52
Nový
 
 
 
 
│
└ 
Re: no nevím
Jiří Knesl 20. 12. 2010 17:09
Nový
 
 
 
 
│
 
└ 
Re: no nevím
Bronislav Klučka 20. 12. 2010 18:58
Nový
 
 
 
 
│
 
 
└ 
Re: no nevím
Jiří Knesl 21. 12. 2010 08:30
Nový
 
 
 
 
│
 
 
 
└ 
Re: no nevím
Bronislav Klučka 21. 12. 2010 10:18
Nový
 
 
 
 
├ 
Re: no nevím
pas 20. 12. 2010 18:01
Nový
 
 
 
 
│
└ 
Re: no nevím
Jiří Knesl 21. 12. 2010 08:44
Nový
 
 
 
 
└ 
Re: no nevím
blizzboz 27. 12. 2010 08:04
Nový
Re: Kaffeine: další povzbuzení pro javascriptaře
Michal Augustýn 15. 12. 2010 09:52
Nový
Re: Kaffeine: další povzbuzení pro javascriptaře
Karel Fučík 15. 12. 2010 13:32
Nový
├ 
Re: Kaffeine: další povzbuzení pro javascriptaře
Petr Mejzlík 15. 12. 2010 16:45
Nový
├ 
Re: Kaffeine: další povzbuzení pro javascriptaře
blizzboz 15. 12. 2010 16:55
Nový
└ 
Re: Kaffeine: další povzbuzení pro javascriptaře
Josef Richter 15. 12. 2010 18:52
Nový
Kaffeine
Pingy 16. 12. 2010 14:26
Nový
Síla Javascriptu
severák 16. 12. 2010 23:18
Nový
└ 
Re: Síla Javascriptu
Bronislav Klučka 17. 12. 2010 05:07
Nový
 
└ 
Re: Síla Javascriptu
pas 17. 12. 2010 08:52
Nový
 
 
├ 
Re: Síla Javascriptu
Martin Malý 17. 12. 2010 10:42
Nový
 
 
│
├ 
Re: Síla Javascriptu
pas 17. 12. 2010 10:52
Nový
 
 
│
│
└ 
Re: Síla Javascriptu
Bronislav Klučka 17. 12. 2010 23:24
Nový
 
 
│
└ 
Re: Síla Javascriptu
blizzboz 18. 12. 2010 03:12
Nový
 
 
└ 
Re: Síla Javascriptu
Bronislav Klučka 17. 12. 2010 23:33
Nový
 
 
 
├ 
Re: Síla Javascriptu
Bronislav Klučka 17. 12. 2010 23:47
Nový
 
 
 
│
├ 
Re: Síla Javascriptu
Bronislav Klučka 17. 12. 2010 23:51
Nový
 
 
 
│
└ 
Re: Síla Javascriptu
Petr Mejzlík 17. 12. 2010 23:58
Nový
 
 
 
│
 
├ 
Re: Síla Javascriptu
Bronislav Klučka 18. 12. 2010 00:02
Nový
 
 
 
│
 
└ 
Re: Síla Javascriptu
Martin Malý 18. 12. 2010 07:27
Nový
 
 
 
│
 
 
└ 
Re: Síla Javascriptu
Petr Mejzlík 18. 12. 2010 12:54
Nový
 
 
 
└ 
Re: Síla Javascriptu
pas 18. 12. 2010 02:42
Nový
 
 
 
 
└ 
Re: Síla Javascriptu
Bronislav Klučka 20. 12. 2010 19:10
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem