cs: JavaScript: Nejnepochopenější programovací jazyk světa

Published: Sunday, January 11th, 2009 at 3:11 pm. Tags: , . . Author: Libor Jelinek

(Překlad slavného článku Douglase Crockforda.) JavaScript, známý také pod jmény LiveScript, JScript a ECMAScript, is je jedním ze světově nejoblíbenějších programovacích jazyků. Prakticky každý počítač na světě má nainstalován nejméně jeden interpret jazyka JavaScript. Popularita JavaScriptu vznikla z jeho role skriptovacího jazyka pro WWW stránky.

I přes tuto obrovskou rozšířenost, je tu jen malé povědomí o JavaScriptu jaku velmi hezkého dynamicky objektově orientovaného programovacího jazyku určeného zdaleka ne jen pro WWW. Proč tomu tak je a proč je tento jazyk tak pochopen?

Jméno


“Java” v jeho jméně by napovídat, že JavaScript nějak souvisí s Javou, že je to jeho podmnožina nebo odlehčená verze Javy. Matoucí jméno přispívá k tomu, že si lidé myslí, že JavaScript je interpretovaná Java. Ve skutečnosti Java je interpretovaná Java. A JavaScript je naprosto jiný jazyk.

JavaScript má je nicméně syntakticky podobný Java, stejně jako Java je podobná k jazyku C. Ale není to díky tomu podmnožina Javy, stejně jako Java není podmnožina C, kvůi podobnosti syntaxe. Vtipné je, že JavaScript je lepší pro aplikace pro které původně byla Java určena.

JavaScript nebyl dokonce ani vyvinut společností Sun Microsystems, autorem Javy. JavaScript vytvořili v Netscapu a původně se měl jmenoval LiveScript, ale toto jméno nebylo dostatečně matoucí.

“Script” nám našeptává, že to není skutečný “velký” programovací jazyk. Pravda je velmi subjektivní a záleží na úhlu pohledu. V porovnání s C, tak JavaScript vyměnil výkon za silně dynamické vlastnosti.

Lisp v kabátu C


JavaScriptová syntaxe podobná C (složené závorky, podoba příkazů jako for apod.) nás ukolébávají, že je to prostě další běžný procedurální jazyk. Chyba lávky, protože JavaScript má mnohem více společného s funkcionálními jazyky jako Lisp or Scheme, než s C nebo Javou. Má pole místo seznamů a objekty místo vlastností, funkce jsou provořadě třídy, má uzávěry (closures), není typově striktní (loose type-control).

Změna


JavaScript byl navržen k běhu uvnitř Netscape Navigatoru. Jeho úspěch z něj učinil povinnou schopnost pro každý webový prohlížeč. To si muselo vynutit jeho určitou změnu. JavaScript is vlastně takový George Reeves programovacích jazyků. Dobře se hodí pro velké množství ne-webových aplikací.

První verze JavaScriptu byly funkčně velmi chudé. Neměli prostředky pro zacházení s vyjímkami, vnitřní funkce (inner fuctions) ani dědičnost. Dnešní JavaScript je však kompletně objektově orientovaný programovací jazyk. Bohužel mnoho názoru na jeho schopnosti vychází z nepochopení.

Po Netscapu se dorozu ujala komise organizace ECMA nad dalším vývojem, jeho rozšiřováním a vypořádání se s jeho největším problémem: existencí příliš mnoha verzí vytvářející další zmatekl.

Chyby v návrhu


Žádný programovací jazyk není dokonalý. JavaScript není vyjímkou a některým věcem by bylo lepší se vyhnout. Např. příliš mnoho klíčových slov, operátor + znamená jak sčítání čísel, tak spojování řetězců simplicitním vynuceným přetypováním, nebo k chybám náchilný příkaz with. Podobné chyby v návrhu jsou příčinou častých programátorských chyb. Naštěstí mnoho těchto problémů se lze vyvarovat dobrý lint programem.

Nedokonalostí je poměrně hodně a bohužel komise ECMAScript se příliš k jejím řešením nemá, spíše se zaměřuje na vytváření nových chyb.

Příšerné implementace


Některé z dřívějších implementací JavaScriptu byly pořádně chybové a vrhaly špatné světlo na celý jazyk. Ke všemu byly tyto implementace použity v ještě horších chybových webových prohlížečích.

Příšerné knihy


Skoro všechny knihy o JavaScriptu jsou prostě příšerné. Obsahují chyby, hloupé příklady, učí špatné praktiky. Důležité vlastnosti jazyka jsou často chabě vysvětleny nebo úplně vynechány. Recenzoval jsem tucty knihy a jediná kniha, kterou můžu doporučit je JavaScript: The Definitive Guide (5. výdání) od Davida Flanagana. (Autoři, pokud jste napsali dobrou chybu, pošlete mi, prosím, váš text.)

Poznámka:
Český překlad, který vydal Computer Press je velmi zastaralé vydání a vůbec neuvažujte o tom si ho koupit. To znamená, že bohužel neexistuje kniha o JavaScriptu v češtině, která by stála za zmínku.

Příšerný standard


Oficiální specifikace jazyka je spravována a publikována organizací ECMA. Tato specifikace je mimořádně k ničemu – nesmírně nepřehledná, a velmi obtížně porozumitělná. Tento fakt mírně zbavuje viny autory knihy. Komise ECMA a TC39 by měli hluboce stydět.

Amatérismus


Většina lidí píšící JavaScript nejsou programátoři. Chybí jim vzdělání a disciplína k psaní dobrých programů. JavaScript má mnohem více možností a síly, než jakou jsou schopni využít. To celé přispělo k reputaci JavaScriptu jako jazyku vhodného maximálně pro amatéry, rozhodně ne však pro profesionální programátory. To však jednoduše není pravda.

Objektová orientovanost


Je JavaScript objektově orientovaný nebo ne? Má objekty obsahující data a metody pracující nad těmito tady. Objekty mohou obsahovat další objekty. Nemá však třídy, ale má konstruktory, které dělají, to co třídy včetně schopnosti chovat se jako proměnné a metody tříd. Nemá třídní dědičnost (class-oriented), ale má prototypovou (prototyped-oriented).

Hlavní dva pilíře vytváření objektů je dědičnost (je A) a zapouzdření (má A). JavaScript umí oboje a díky dynamické povaze exceluje zejména v zapouzdření.

Někdo argumentuje že JavaScript není skutečný objektově orientovaný jazyk, protože neposkytuje skrývání informací mezi objekty (viditelnost private, protected, public z Javy): všichni členové objektů jsou totiž veřejné.

Ale JavaScriptové objekty mohou mít soukromé proměnné a metody. Samozřejmě, je potřeba trochu námahy pro pochopení, protože JavaScript je skutečně nejnepochopenější programovací jazyk na světě.

Někdo argumentuje že JavaScript není skutečný objektově orientovaný jazyk, protože neposkytuje dědičnost. Ale JavaScript podporuje nejen klasickou dědičnost, ale dokonce i paradigmata ke znovu použití kódu.

Originál: Copyright 2001 Douglas Crockford. All Rights Reserved Wrrrldwide.

Překlad: copyright © 2009 Virtage Software, Libor Jelínek.


You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

Leave a Reply

Sidebar decoration image
Copyright © 2001-2009 Virtage Software. Virtage is registered trademark of Libor Jelinek.
Developer blogs and tutorials Virtage Devblog is proudly powered by WordPress.