Cheš být lepším programátorem? Neboj se vynalézat kolo znova a znova!

[* 2010/11/wheels240.jpg <] *"Nesnaž se znova vynalézat kolo, použij hotové řešení."* Jestli se alespoň trochu motáte kolem vývoje softwaru, určitě jste již tuto mantru slyšeli nespočetněkrát. Většina problémů, na které při vývoji aplikace narazíme, je již dávno vyřešena a hotovou knihovnu (zabalenou v pěkné černé krabičce), stačí většinou jen vybrat a použít. Nemohu popřít že to má většinou smysl, obzvlášť jde-li o obchod. Díky hotovým řešením můžeme vyrobit a dodat produkt rychleji, levněji, což bezpochyby není špatně. V extrémním případě se ale z programátora stává cvičená opička. Jeho denním chlebem je pak výběr, studium a lepení již hotových frameworků, knihoven a dalších udělátek. Programujete-li ve svém volném čase, nebojte se dělat věci, které již udělali jiní. I když je uděláte hůř (či úplně špatně), máte alespoň příležitost poučit se z vlastních chyb. Z opravdových programátorských chyb, které učiníte při řešení jiných úloh, než je výběr jednoho z *n* frameworků. A pokud ve svém volném čase neprogramujete, měli byste začít. ("obrázek":http://www.flickr.com/photos/chrisjfry/309701186/ pochází od "chrisjfry":http://www.flickr.com/photos/chrisjfry/, licence "cac by-nc-nd":http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en) .{font-size:80%;}

Co byste měli vědět o JavaScriptu [2]: JavaScript nemá “block-level scope”

V dnešním velice krátkém “dílu”:http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/ se zmínim o drobnosti, kterou by měli mít na paměti hlavně programátoři přicházející z jazyků jako je Java či C#. Vývojáře znalé třeba PHP ale zajisté nijak nezaskočí, ti zde budou jako doma. V JavaScriptu (podobně jako v PHP) je totiž *lokální proměnná platná vždy v rámci celé funkce*.

Oproti tomu ve zmiňované Javě je platnost omezena na blok kódu.
/—html

// Java
public void funkce() {
    int  i = 10;
    for (int i =0; i < 15; i++) {
        System.out.println("Uvnitr bloku i: " + i);
    }
    System.out.println("Vne bloku i: " + i);

}

\—
V uvedném kódu překryje proměnná `i` deklarovaná v záhlaví cyklu vnější proměnnou `i`.

V Javascriptu ale následující zápis postrádá smysl:

/—html

// JavaScript
function funkce() {
    var i = 10;

    for (var i = 0; i < 6; i++) {
        //neco...
    }

    for (var i = 0; i < 68; i++) {
        //neco jineho
    }

}

\—
Proměnná `i` bude prostě jenom jedna, bez ohledu na počet “použití klíčového slova `var`”:http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/.

S oborem platnosti na úrovni funkce silně souvisí další zajímavá vlastnost, nazývaná “variable hoisting”. Proberu ji příště.

Co byste měli vědět o Javascriptu [1]: proměnná a globální obor platnosti

V “prvním díle miniseriálu”:http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-0-uvod/ zmíním jedno z nejznámějších špatných míst Javascriptu. V anglicky psaných zdrojích bývá označován termínem “implied global”. Jde o velice důležitou vlastnost jazyka, jejíž znalost (a hlavně plné pochopení důsledků) vám může ušetřit mnoho vytrhaných vlasů.

Continue reading

Co byste měli vědet o Javascriptu [0]: Úvod

[* http://zapisnik.pepiino.cz/wp-content/upload/2010/10//js-reserved-used2-193×300.png .(Rezervovaná slova JavaScriptu (výběr těch, která mají význam)<] Vítejte v úvodním příspěvku průvodce po temných i světlých zákoutích JavaScriptu. Každý týden tu naleznete kratší zápisky o různých vlastnostech jazyka, které je dobré znát. JavaScript je mezi programovacími jazyky výjimečný tím, že většina z nás k němu přijde bez jakýchkoliv znalostí. Syntaxe je podobná jazykům vycházejícím z C a za pomoci (většinou mizerných) tutoriálů na internetu dokáže spatlat "nějak" funkční kus kódu každý. Mnohdy si člověk vystačí bez pořádných znalostí jazyka poměrně dlouho a než se naděje, tvoří už svojí první velkou Javascriptovou věc. A pak to může dost bolet. V JavaScriptu (podobně jako v ostatních jazycích) existuje mnoho temných zákoutí, jejichž neznalost velice zkomplikuje vývojářův život. A naopak má svoje silné stránky, jejichž pochopení mu může pomoci dosáhnout výsledků rychleji, lépe a dokonce zábavněji ;-) . Ostatně, "už jsem o tom nedávno psal":http://zapisnik.pepiino.cz/mam-se-naucit-javascript/. Nebudu se zde zabývat základními konstrukcemi jazyka, jejichž popis se válí na každém internetovém rohu. Chci se spíš soustředit a informace, které bývají (bohužel) často v materiálech pro začátečníky opomíjeny nebo dokonce(!) uváděny špatně. Obvyjkle programátoři neznají ani po mnoha letech občasného užívání Javascriptových pilulek, nebo jim úplně nerozumí. Seriál má vlastní "štítek":http://zapisnik.pepiino.cz/tagy/co-byste-meli-vedet-o-javascriptu/ a také "vlastní RSS":http://zapisnik.pepiino.cz/tagy/co-byste-meli-vedet-o-javascriptu/feed/. Držte si čepice, přístí týden začínáme! Aktualizace: zatím vyšlo ================== Zatím v seriálu vyšly následující články: 1) "proměnná a globální obor platnosti":http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-1-promenna-a-globalni-obor-platnosti/ 2) "Javascript nemá 'block-level scope'":http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-2-javascript-nema-block-level-scope/ 3) "variable hoisting":http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-3-variable-hoisting/ 4) "deklarace funkce a funkce jako výraz":http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-4-deklarace-funkce-a-funkce-jako-vyraz/ 5) "with je zlý čaroděj":http://zapisnik.pepiino.cz/co-byste-meli-vedet-o-javascriptu-5-with-je-zly-carodej/

Střípky ze světa webu, Javascriptu a vůbec …

[* 2010/10/calendar180.jpg .(Ilustrace ) <] Aneb co mě zaujalo v posledním týdnu? Nezávisle na tom, zda jde o aktuální novinky, nebo jsem objevil ameriku :) "The Noded":http://thenoded.com je nový podcast o "node.js":http://nodejs.org. Natolik nový, že tvůrci stále nedokázali stvořit web. "První díl je ale ke stažení":http://thenoded.com/episode-1.mp3 a můžete také sledovat "@thenoded na twitteru":http://twitter.com/thenoded. Alespoň v prvním dílu se podcast hojně věnuje NodeCore, takže varuji před spoustou "céčkovských" termínů a témat. "Firefox 4 bude obsahovat jednoduchou vývojářskou konzoli":https://developer.mozilla.org/en/Using_the_Web_Console. Vývojáří rozšíření "Firebug reagují":http://blog.getfirebug.com/2010/10/24/firebug-metamorphosis/: >>”Simply working harder to compete is equal to giving up. Instead we have to raise the bar!”<< Držím palce. "Společnost Sencha zveřejnila developer preview aplikace Sencha Animator":http://www.sencha.com/blog/2010/10/26/introducing-sencha-animator-the-html5-css3-alternative-to-flash/. Mělo by jít o CSS3 alternativu k Flashi. Vypadá velice zajímavě. Jen škoda, že se mi ji nepodařilo ani spustit. Na blogu "DailyJs":http://dailyjs.com/ vychází již od února seriál "Let's Make a Framework":http://dailyjs.com/tags.html#lmaf. Autor postupně prochází různé kroky tvorby jednoduchého javascriptového frameworku od architektury, přes implementaci selektorů, obsluhu událostí až po podporu pluginů. Vznikající framework samozřejmě nemá být konkurencí existujícím hvězdám, ale jen učební pomůckou. Pokud je pro vás fungování vašeho oblíbeného JS frameworku magií a nechce s vám hned studovat jeho kód, doporučuji projít aspoň tento seriál. "Podpora pri indexaci AJAXových aplikací od Google":http://code.google.com/intl/cs-CZ/web/ajaxcrawling/docs/getting-started.html a video záznam z přednášky "Using Node.js and YUI 3":http://developer.yahoo.com/yui/theater/video.php?v=glass-node na YUI Theater spolu souvisí. Kdo pozná jak, má u mě zmrzlinu. :)