Dobre strony JavaScript-u
Douglas Crockford -- twórca standardów JSON i ECMAScript 3.1 -- w Lutym 2009 został zaproszony na Google Tech Talks. Wygłosił tam bardzo interesujący wykład oparty na swojej książce „JavaScript: The Good Parts”. Crockford określa JavaScript jako posiadający wiele z najlepszych pomysłów, jakie kiedykolwiek zostały dodane do języka programowania, jednocześnie zawierając jedne z najgorszych. Twierdzi, że kluczem do pisania dobrych programów w JS jest rozpoznanie dobrych stron tego języka i unikanie złych.
Dla niecierpliwych: link do nagrania z wykładu.
Złe strony języka
Autor zaczyna od wymienienia złych stron języka JavaScript, których należy unikać.
- Zmienne globalne są fundamentem ataków cross-site scripting oraz częstym powodem konfliktów bibliotek JavaScript.
- Operator
+jest jednocześnie operatorem dodawania i konkatenacji, co w połączeniu z dynamicznym typowaniem staje się problematyczne. - Opuszczanie średników prowadzi do powstawania błędów. Nie należy o nich zapominać.
- Operator
typeofzwraca wynik"object"zarówno dla obiektu jak i tablicy, co jest mało przydatne, oraz dla wartościnull, co jest błędem. - Fałszywe tablice bez rozmiaru, będące w rzeczywistości tablicami haszującymi, co mocno wpływa na wydajność.
- Blok
withpowoduje ogromny spadek wydajności. Nie należy go stosować, a w nadchodzącym standardzie go nie będzie. - Funkcja
evaljest niebezpieczna i niepotrzebna. Jeżeli uważasz, że potrzebujesz użyć tej funkcji, przemyśl to jeszcze raz. - Operator
==i operator!=wykonują konwersję typów, co prowadzi do nieoczekiwanych skutków. Należy zamiast nich używać operatora===i operatora!==. - Zbyt wiele dolnych wartości (
false,null,undefined,NaN) skutkuje tym, że początkujący często używają niewłaściwych. - Pętla
for..initeruje po polach i metodach obiektu oraz polach i metodach wszystkich nad-obiektów tego obiektu, co jest częstym źródłem błędów. - Dopuszczenie instrukcji nie mających efektu (
foo;) bardzo utrudnia wyszukiwanie błędów w kodzie. - Mała precyzja typu
float(0.1 + 0.2 !== 0.3). Należy zwrócić na to uwagę w szczególności przy liczeniu kwot pieniężnych.
Wymienia także złe strony wszystkich języków ze składnią C-podobną.
- Opuszczanie klamr w jedno-liniowych blokach kodu skutkuje powstawaniem błędów podczas utrzymywania programu.
- Operator
++i operator--zwiększają zawiłość kodu. Dobrą praktyką jest nie stosowanie ich. - Możliwość utworzenia bloku
casebez instrukcjibreakjest przyczyną powstawania trudnych do wykrycia błędów.
Dobre strony języka
Lista dobrych stron jest dużo krótsza.
- Funkcja lambda jest potężnym i bezpiecznym narzędziem. Zdaniem Crockforda, lambda to najlepsza rzecz jaka kiedykolwiek została dodana do języka programowania.
- Dynamiczne obiekty, które można dowolnie zmieniać dodając lub usuwając pola i metody, czynią język niezwykle łatwym w użyciu.
- Dynamiczne typowanie uwalnia od błędów niezgodności typów, dzięki czemu programy w JS są krótsze i czytelniejsze.
- Literały obiektowe umożliwiają szybką i czytelną definicję obiektu. Były inspiracją do powstania formatu przesyłania danych JSON.
- Dziedziczenie prototypów wyzwala od konieczności tworzenia klas, co bardzo skraca kod źródłowy.
- Domknięcia pozwalają na tworzenie obiektów z prywatnymi polami i metodami. Są jedną z najlepszych części języka JavaScript.
JavaScript wirtualną maszyną całego świata
W swoim wykładzie Crockford wiele razy podkreśla, że JavaScript jest najbardziej nierozumianym językiem programowania, a większość zarzutów stawianych pod jego adresem jest po prostu fałszywe. Twierdzi, ze to nie JavaScript jest powolny, tylko DOM, który jest jednym z najgorszych API, jakie kiedykolwiek stworzono. Nawołuje do używania bibliotek przykrywających DOM (w szczególności YUI, które jest jego dziełem) oraz chwali coraz szybsze interpretery JavaScript-u.
Podczas wykładu można także usłyszeć wskazówki dotyczące stylu kodowania od samego mistrza, historię języka JavaScript oraz formatu JSON, zapowiedź zmian w nowym standardzie ECMAScript 3.1 oraz opinię Crockforda na temat powstającego standardu HTML5.
JSLint
Crockford wspomina o narzędziu do sprawdzania jakości kodu jego autorstwa JSLint.
Książka
Polskie tłumaczenie wspomnianej w wykładzie książki Douglasa Crockforda można kupić w Helionie za ok. 30zł.


Obejrzałem tę prezentację po raz pierwszy jakieś półtorej roku temu i odmieniła ona moje życie
Dzięki niej JavaScript podzielił się dla mnie na dwie części – jedną, tę dobrą, którą należy wykorzystywać i drugą, tę złą, której nie należy dotykać. Pozwoliło mi to spojrzeć zupełnie inaczej na ten język, bo już nie musiałem się zastanawiać „co to za syf?”. Od tej pory wiedziałem, że to po prostu nie powinno się znaleźć w specyfikacji. Niby nic, ale dużo się zmienia.
BTW. polskie tłumaczenie książki Crockforda jest do bani. Kto może niech czyta w oryginale.