Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
За что ненавидят язык программирования JavaScript
Изучили споры между фанатами и хейтерами JavaScript и разобрались, чем JS заслужил нелюбовь кодеров и справедливы ли нападки.
6773
Среди веб-разработчиков принято шутить над PHP и хоронить язык каждый год, а среди разработчиков в целом принято шутить над JavaScript. Мы изучили дискуссии между фанатами и хейтерами JS и скомпилировали их в этом материале.
В этой статье мы разбираемся, чем JavaScript заслужил нелюбовь пользователей и справедливы ли эти нападки.
Почему не любят JavaScript
Самыми большими проблемами в JS считаются синтаксис и семантика языка. Вместе они создают уродливый и многословный язык, который обычно больно читать.
При использовании JS программистам приходится писать костыли для решения проблем, которые находятся в самом языке, и эти костыли чрезвычайно сложны и неповоротливы. Когда программист пользуется языком программирования, он не хочет сталкиваться с громоздким синтаксисом, но ему приходится.
Вот почему появляется так много библиотек и транслируемых языков, которые очищают синтаксис и семантику JS или даже позволяют программистам писать на других языках. Даже людям, которые любят писать на JS, приходится иногда использовать транспиляторы, чтобы было легче организовывать собственный код.
К примеру, в Java есть классы. Классы содержат методы и поля. Методы и поля могут быть объявлены как часть класса. Методы и поля имеют модификаторы доступа. Из классов вы можете создавать объекты. У объектов есть конструкторы, которые определяются одинаково. В Java есть множество элементов для реализации наследования.
Все эти языковые элементы сделаны явными. Классы являются базовым элементом абстракции, а элементы, из которых они состоят, четко идентифицируются своими именами и семантикой.
Зато в JavaScript есть объекты, функции (которые также являются объектами) и переменные (которые могут указывать на объекты, которые могут быть функциями). При этом объекты не являются объектами, но являются ассоциативными массивами.
Программист подразумевает разную семантику в зависимости от того, как они объединяют и вкладывают эти вещи. В итоге использование JavaScript приводит к комбинациям одних и тех же элементов, каждая из которых имеет разные подразумеваемые значения.
Фанаты JS утверждают, что жалобы на отсутствие классов в JS — это предвзятое отношение к использованию скомпилированных объектно-ориентированных языков на основе классов, но дело не в классах. Речь идет о ясных, явных элементах языка, позволяющих программистам читать код и быстро его понимать.
Также язык должен давать программистам контроль над кодом и возможность предотвращать утечки данных, предоставляя вспомогательные элементы. JavaScript этого не делает.
В защиту JavaScript
Разберем основные причины, по которым не любят JavaScript, и разберемся, справедливы ли претензии.
- JavaScript действительно прост в использовании. Даже идиот сможет им воспользоваться. C++, Java и другие языки имеют более высокий барьер для входа. А поскольку джуны часто пишут именно на JavaScript, большая часть кода на JavaScript является плохим. Это не недостаток языка, это побочный эффект простоты использования.
- В JavaScript есть ошибки. О них много пишут в интернете, но большинство преувеличено до крайности. Изначально JavaScript был разработан довольно быстро из маркетинговых соображений, и в первых версиях JS правда возникало много ошибок. Но если вы используете ES2015 и линтер со строгими правилами, все популярные ошибки не будут актуальными.
- Как и PHP, JavaScript — это язык, который разработчики любят ненавидеть. Это как сигнал о том, что ты принадлежишь к крутой группе программистов. Хейтеры просто пытаются показать, какие они классные.
- Раньше JavaScript был отстойным. Однако после ECMAScript 2015 ситуация стала намного лучше. Вы можете перенести даже функции ECMAScript 2016+ в ES5, чтобы использовать все актуальные функции языка. Когда-то давно, когда многие разработчики впервые столкнулись с JavaScript, было на что жаловаться.
- В проблемах с DOM винят JavaScript. JavaScript — это язык программирования. DOM и функции браузера, связанные с DOM, — это просто API JavaScript. Совместимость JavaScript между браузерами долгое время была превосходной. Но все помнят о несовместимости DOM API, с которой им приходилось бороться, поэтому и сегодня приписывают недостатки JavaScript.
Заключение
А что думаете вы? Смогла ли JavaScript решить проблемы языка в новых итерациях? Или синтаксис и сегодня оставляет желать лучшего, и принципиальную конструкцию языка не исправить уже никакими доработками?
Ненавидят ли JavaScript просто потому, что это модно? Или, может, хейт JavaScript справедлив и сегодня?
Присоединяйтесь к дискуссии и напишите об этом в комментариях.
6773
Что думаете?
15 комментариев
Сначала интересные
По-моему, автор перепутал причину и следствие. JS является единственным языком, выполняемым в браузере (с недавних пор появился WASM, но к нему пока нет полноценного API). Именно поэтому так много компиляторов из других языков в JS. Людям привычнее писать на том, что они лучше знают, поэтому JS им не нравится своей безальтернативностью.

Кто пишет такие статьи? Тут буквально все высосано из пальца, будто автор сам не знал о чем хочет тут писать. Как-то все дико амфорно без примеров. Единственное что: объекты не объекты а ассоциативные массивы. Покажите мне язык где "ассоциативные массивы" могут наследоваться друг от друга. Нет классов? WTF?? Уже давно есть вполне себе классы. То что JS - это не копирка от языка X, это не проблема JS, а исключительно человека, который ожидает, что другой язык должен оказаться копией привычного ему другого языка. "Также язык должен давать программистам контроль над кодом и возможность предотвращать утечки данных, предоставляя вспомогательные элементы. JavaScript этого не делает." Фраза обо всем и ни о чем. Какие конкретно нужны автору инструменты, которые ему не дает язык? > Раньше JavaScript был отстойным. Ну а тут риторика автора показала весь его профессионализм засчет оценочных суждений со странной семантической окраской. В целом, статья написана "хейтером", который явно не разобрался, что и как, а статью выпускать надо. Жаль потраченного времени
Простой пример. Задайте себе вопрос, а сразу ли вы обратили внимание, в чём проблема, или только после раздумий и анализа?
Берем консоль нашего бройзера и вводим следующие команды:
> parseInt(0.05) // 0
> parseInt(0.005) // 0
> parseInt(0.000005) // 0
> parseInt(0.0000005) // 5
Whaaaat???
Вот именно из-за таких штук я и считаю, что JavaScript - это игрушка для детей, а не язык программирования. И TypeScript вас не спасёт от сотен вот таких же проблем в языке, которые очередями стреляют вам в ногу. И когда вам скажут, что ваш кардиостимулятор работает на JavaScript, не умрите случайно от внезапного сердечного приступа...
Victor Cozhuhari, В JavaScript есть parseFloat

Victor Cozhuhari, Ого, оказывается если полагаться на неявное преобразования типов бездумно, то возникают проблемы, ничего себе поворот. А если знать язык хорошо то:
1) 0.0000005 это так же и 5e-7. Передав число в парс строки (а в серьезных языках вы тоже таким занимаетесь?), вы получите преобразование к строке, так как это число достаточно маленькое, то оно переходит при ВЫВОДЕ КАК СТРОКИ в научную нотацию, те 5e-7, далее парс "5e-7" КАК ЦЕЛОГО ЧИСЛА дает 5. Те вы в 2ух местах намеренно нарушили то для чего нужна функция и "О УЖС НЕЮЗАБЕЛЬНО".
2) И да, TS бы тут спас > Argument of type 'number' is not assignable to parameter of type 'string'.
Советую вам изучить языки которые вы критикуете, так ваша критика будет более уместной
Показать все комментарии