30 stycznia 2011 ~ 1 Komentarz

Dobre strony JavaScript-u

{lang: 'pl'}

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ć.

  1. Zmienne globalne są fundamentem ataków cross-site scripting oraz częstym powodem konfliktów bibliotek JavaScript.
  2. Operator + jest jednocześnie operatorem dodawania i konkatenacji, co w połączeniu z dynamicznym typowaniem staje się problematyczne.
  3. Opuszczanie średników prowadzi do powstawania błędów. Nie należy o nich zapominać.
  4. Operator typeof zwraca wynik "object" zarówno dla obiektu jak i tablicy, co jest mało przydatne, oraz dla wartości null, co jest błędem.
  5. Fałszywe tablice bez rozmiaru, będące w rzeczywistości tablicami haszującymi, co mocno wpływa na wydajność.
  6. Blok with powoduje ogromny spadek wydajności. Nie należy go stosować, a w nadchodzącym standardzie go nie będzie.
  7. Funkcja eval jest niebezpieczna i niepotrzebna. Jeżeli uważasz, że potrzebujesz użyć tej funkcji, przemyśl to jeszcze raz.
  8. Operator == i operator != wykonują konwersję typów, co prowadzi do nieoczekiwanych skutków. Należy zamiast nich używać operatora === i operatora !==.
  9. Zbyt wiele dolnych wartości (false, null, undefined, NaN) skutkuje tym, że początkujący często używają niewłaściwych.
  10. Pętla for..in iteruje 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.
  11. Dopuszczenie instrukcji nie mających efektu (foo;) bardzo utrudnia wyszukiwanie błędów w kodzie.
  12. 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ą.

  1. Opuszczanie klamr w jedno-liniowych blokach kodu skutkuje powstawaniem błędów podczas utrzymywania programu.
  2. Operator ++ i operator -- zwiększają zawiłość kodu. Dobrą praktyką jest nie stosowanie ich.
  3. Możliwość utworzenia bloku case bez instrukcji break jest przyczyną powstawania trudnych do wykrycia błędów.

Dobre strony języka

Lista dobrych stron jest dużo krótsza.

  1. Funkcja lambda jest potężnym i bezpiecznym narzędziem. Zdaniem Crockforda, lambda to najlepsza rzecz jaka kiedykolwiek została dodana do języka programowania.
  2. Dynamiczne obiekty, które można dowolnie zmieniać dodając lub usuwając pola i metody, czynią język niezwykle łatwym w użyciu.
  3. Dynamiczne typowanie uwalnia od błędów niezgodności typów, dzięki czemu programy w JS są krótsze i czytelniejsze.
  4. Literały obiektowe umożliwiają szybką i czytelną definicję obiektu. Były inspiracją do powstania formatu przesyłania danych JSON.
  5. Dziedziczenie prototypów wyzwala od konieczności tworzenia klas, co bardzo skraca kod źródłowy.
  6. 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.

Zapraszam do oglądania. :)

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ł.
Link do księgarni

Komentarze dla “Dobre strony JavaScript-u”

  1. Piotrek Reinmar Koszuliński 1 marca 2011 at 23:52 Permalink

    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.


Dodaj komentarz