пятница, 10 сентября 2010 г.

JavaScript - есть и хорошие стороны

JS такой загадочный язык, который никто не учит, однако все на нем программируют. Я не исключение, но я чувствую себя некомфортно, когда не понимаю, по каким правилам мне приходиться играть.

Скопипастив очередной кусок JS, я вспомнил слова Мартина Фаулера (интересное интервью - хоть посмотрите, как он выглядит), что для расширения кругозора надобно учить хотя бы по одному новому языку в год. Полиглоты, называет он таких программистов :) Я же подумал - надоело мне мучаться с JS, хочу научиться писать на нем нормально.

В общем, я чуть-чуть попытался разобраться (ниже со ссылками), по-моему, очень даже интересно.

Сначала я решил посмотреть, что у нас есть из почитать. Две наиболее советуемые книги по JavaScript это:

JavaScript: The Definitive Guide by David Flanagan
и
JavaScript: The Good Parts by Douglas Crockford

Я, конечно, серьезно думал их прочитать, но для начала решил найти что-нибудь попроще. Я люблю лекции и вуаля:

Douglas Crockford: "The JavaScript Programming Language"/1 of 4
Douglas Crockford: "The JavaScript Programming Language"/2 of 4
Douglas Crockford: "The JavaScript Programming Language"/3 of 4
Douglas Crockford: "The JavaScript Programming Language"/4 of 4

Ребята, книжки, скорее всего очень даже хорошие, но видео я вам советую, потому что сам посмотрел и остался доволен - всего 2 часа, но основные моменты разложены очень хорошо, а JS стал как-то роднее, понятнее, и главное, мне он теперь в чем-то нравится.

К слову, Дуглас Крокфорд, как выясняется, интересный товарищ. В частности, он придумал JSON - ныне очень популярный формат (AJAX, например, это часто не Async JS and XML, а Asynch JS and JSON, просто потому что последний обычно компактнее, а значит быстрее).




Так вот, после просмотра лекций Дугласа выяснилось, что в JS есть не мало интересных моментов (те самые The Good Parts), я упомяну лишь то, что, к примеру:
  • Там не нужны классы, однако ООП вполне там работает
  • Паттерн Prototype - это основа наследования JS и часть языка
  • В JS Reflection - это приятно; объект - это коллекция свойств и функций, по которым можно итерироваться
  • Лямбда-функции, которые в C# появились не так давно, в JS существуют с самого начала (про Java давайте не будем вспоминать, closures вроде там до сих пор только обсуждают - поправьте меня, если я не прав)
  • Паттерн Decorator нужен в C# и Java всего лишь из-за ограничений этих языков
После этих лекций, например, становится понятно, почему в JS в функцию можно добавить свойство и зачем это нужно. Скажу я вам - до просмотра этого видео такие ходы в JS кажутся какой-то дикой несуразицей.
 
Однако, понятно и то, что даже не смотря на очень интересные особенности языка, он никогда не станет почитаемым языком по той же причине, почему программисты стесняются знания PHP. Слишком много людей пишет на JS, не удосужившись его изучить, как следствие, производя на свет божий что-то, что никак не соответствует духу JS.
 
Но это еще полбеды. Девушка из комментов ко второй части лекции сразила меня наповал:  
This is really indepth. I am not sure half the time what is he talking about. Maybe more simplified examples would help..
Так что, видимо, JavaScript обречен так и остаться непонятым :) Похоже, тут даже наличие попытки изучить ситуации не исправит.

P.S. Там же на Yahoo Video есть лекции Крокфорда по DOM, найдете по ссылкам в Related сами - тоже интересно, особенно его комментарии, как так получилось, что во всех браузерах все по разному. Кстати, видео 2006, а очередной виток войны браузеров он предсказал четко, правда, про Chrome тогда еще не знал.

6 комментариев:

  1. Так что, видимо, JavaScript обречен так и остаться непонятым :)
    А тем временем node.js будет порабощать мир и интернеты.

    ОтветитьУдалить
  2. Ага. Я еще недавно удивился увидев JS shell для MongoDB (очередной buzz word на данный момент) - можно у них прям на сайте пробовать. Так что JS эт не только браузеры.

    ОтветитьУдалить
  3. JS это однозначно не только браузеры. По сути его можно использовать в том или ином виде имея под рукой Mozilla Rhino. Не сочтите за рекламу ресурса, но недавно писал об одном из применений JS в рамках разработки Eclipse RCP приложений: http://www.grodnosoft.by/2010/09/dinamicheskie-vyrajenija-v-eclipse.html

    Вообще, как заметил автор, JS действительно считают каким-то "несерьезным" что ли... Хотя еще 4 года назад довелось поучаствовать в проекте, где все представление (довольно сложное) было сконструировано на JS. Хотя тогда пришлось помучиться из-за отсутствия толковой IDE :) - единственная более-менее тогда была IntelliJ IDEA, но работала до ужаса мееееедленно.

    ОтветитьУдалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. Вкурил видео Дукласа Крокфорда (и ещё в добавок Advanced Javascript - на яхувидео можно найти). Что-то в конце последней лекции он про валидацию JSON-а регекспами прогнал. Уж чем-чем нужно валидировать джейсон, но никак не регулярными выражениями. JSON же рекурсивная структура, и не всякая реализация регекспов поддерживает матчинг таких вещей. Вот в четвёрном дотнете есть такой адъ, как balancing group definitions: http://msdn.microsoft.com/en-us/library/bs2twtah.aspx#balancing_group_definition

    P.S. парсер - лох. Последнюю ссылку не распознал. Пробую без точечки в конце.

    ОтветитьУдалить
  6. Похоже, ссылка не парсится из-за решётки. Печалька.

    ОтветитьУдалить