some image

Я люблю javascript

Метки: Работа

Уже не раз писал заметки о JS, но еще ни разу не говорил о своем отношении к нему. Так вот, я считаю, что если продолжительное время писать на нем и использовать как основной язык — прежним ты уже не станешь. Я действительно считаю, что этот язык не просто плох, а очень плох. Потому что я не знаю второго такого языка, который бы позволял накидать столько логических ошибок на 1 строчку кода. Такого количества неявных вещей, упрощений и тп нет ни в одном другом языке. И меня бы мало это волновало, если бы это был какой-нибудь Lisp или Haskell. Но это язык, на котором приходится писать половину кода браузерного приложения, существующую на стороне клиента.

Я считаю что JS это реально самая большая проблема веба сейчас. Количество кода, не поддающегося рефакторингу, просто зашкаливает даже в самом крутом, на первый взгляд, веб проекте. Загляните в исходники вашего любимого портала. Удивитесь. Да это же просто вакханалия в половине случаев.

Я хочу рассказать в этой заметке о самом жестоком виде логических ошибок, который мне приходилось встречать. Это перемешивание глобальных и локальных переменных. А все идет корнями в дебильный синтаксис javascript. Почему если я пишу

function alertURL(){
 alert(url);
}

я не могу предугадать то что получу? Почему это вообще никаким образом не зависит от меня? Это зависит от того до jQuery я вызвал мою функцию или после, от того какие вообще пакеты я включал в head, от того какой сегодня день, как зовут маму Брендана Айка, но только не от меня.

Правильно! Потому что я не добавил волшебное слово var! Этот целебный эликсир  предотвращающий ошибки, которые вообще не поддаются отладке. А теперь вопрос: накой черт дергать все из глобальной области видимости? Как часто вам внутри функции нужны глобальные переменные? Что, действительно чаще, чем локальные? Почему Zend догадались сделать слово global, a в JS его нет?

Так вот представьте. Мне дают 2 библиотеки, большущие библиотеки в несколько тысяч строк кода каждая, где нет не одного слова var, нет какого-то подобия namespaces, вообще ничего, отделяющего область видимости, нет. Ну не думал тот программист, который писал каждую из них, что их понадобится использовать вместе, а может он вообще не знал что такое var, лабал да лабал себе потихоньку. И они начинают падать, неистово падать из-за смешения глобальных переменных. Само даже допущение такой ситуации — это ошибка в дизайне языка.

Казалось бы — ну введите вы namespaces, и все, и нет проблем, хотя бы на уровне смешения пакетов. Чтоб я мог написать просто в начале каждого пакета ‘use namespace popa’ и все, и решить все проблемы. Но нет, все в очередной раз пользуются гипер костылем, эмулирующим namespaces в js.

И nobody cares, все лабают быдлокод не поддающийся пониманию, и все счастливы.

Related Posts