Где писать код? IDE и редакторы кода для веб-разработчиков
Где писать код? IDE и редакторы кода для веб-разработчиков
27 января 2023 года
Написать код для самого простого сайта можно даже в «Блокноте». Нужно будет сохранить его в формате html, и все будет работать. Но специальные редакторы и IDE (Integrated Development Environment) помогают разрабатывать более сложные проекты быстрее и выполнять многие рутинные задачи при программировании автоматически.
Многие веб-разработчики предпочитают разместить сайт на сервере еще в процессе работы над ним, чтобы тестировать все обновления сразу. При этом важна скорость. Она зависит в первую очередь от качества хостинга, однако удаленность физического сервера тоже имеет значение. Если вы работаете в Центральной России, лучше и хостинг для сайта купить в Москве или ближайшем к вам крупном городе. У LITE.HOST есть специальные тарифы для веб-разработчиков, также при заказе можно выбрать CMS для предустановки на панель управления.
Как работают программы для разработки?
Интегрированная среда для разработки – это цифровая платформа, которая предоставляет полный комплекс инструментов и функций, позволяющих быстро и комфортно создать веб-приложение или довольно сложный сайт.
Среды поддерживают разные языки программирования и предоставляют разные возможности, но базовый функционал IDE обычно включает:
- компилятор – нужен, чтобы превратить написанный код в исполняемый файл;
- интерпретатор – запускает скрипты, которые не нуждаются в компиляции;
- встроенную отладку – платформа автоматически подсвечивает проблемные моменты в коде, помогает искать ошибки;
- возможности для автоматизации – разные инструменты, которые позволяют ускорить процесс разработки;
- умное автодополнение кода – система анализирует контекст и исходя из него предлагает готовые элементы кода;
- интеграцию с системами контроля версий, с которыми удобнее отслеживать внесенные изменения и их эффект на работе сайта;
- инструменты для совместной работы – можно настраивать параметры редактора кода, управлять доступами к проекту и т. д.
У IDE много полезных возможностей для добавления новых функций в продукт, упрощения и ускорения разработки. Однако не каждому проекту они нужны. Для создания простых сайтов может быть вполне достаточно возможностей стандартного редактора кода.
Как выбрать среду для разработки?
Функционал и удобство работы важны, однако хороших IDE множество. Обычно ключевыми факторами при выборе среды для разработчика становятся:
- Поддержка операционной системы, на которой вы работаете.
- Поддержка тех языков программирования, которые используются в работе.
Самыми популярными, особенно для работы в команде и больших проектов, являются кроссплатформенные решения, которые поддерживают несколько языков программирования. Это может понадобится, если вы решите добавить в свой проект дополнительный функционал, который реализуется с помощью другого языка.
Еще один немаловажный критерий – это возможности бесплатной версии и цена подписки.
Лучшие IDE и редакторы кода
- Visual Studio и Visual Studio Code. Это IDE от компании Microsoft, работает с ОС Windows и macOS. Поддерживает все наиболее популярные языки: Python, PHP, JavaScript, HTML, CSS и другие. Предлагает полный пакет возможностей, свойственный IDE, в том числе интеграцию с Git и Azure.
Visual Studio Code – это бесплатный редактор кода. У него меньше возможностей, чем у IDE, но поддерживает 72 языка, имеет функции отладки и автодополнения, большую библиотеку расширений и работает также на Linux. - IntelliJ IDEA. Это платформа от JetBrains, ориентированная на Java. Также в базовой версии в ней можно писать на HTML, CSS и JavaScript. Другие добавляются с помощью плагинов. Одно из преимуществ – интеграция с инструментами сборки Apache Maven, Gradle и Webpack.
- PyCharm. IDE для разработки на Python. Платная лицензионная версия также поддерживает HTML, JavaScript и CSS. Помимо базовых инструментов, среда предлагает умную навигацию, профилировщик Python, а также интеграцию с библиотеками Jupyter Notebook, Anaconda и другими.
- PhpStorm. Интегрированная среда для разработки на PHP, также поддерживает HTML, JavaScript и CSS. JetBrains рекомендует эту IDE также для работы с системами управления контентом. PhpStorm имеет инструменты командной строки, позволяет управлять базами данных SQL. Для управления процессом разработки используются системы контроля версий, отладка и функция Live Edit, позволяющая сразу же проверить в браузере, как будут работать изменения в коде.
- WebStorm. Это среда для разработки на JavaScript. Предлагает удобные инструменты для тестирования, поддерживает популярные фреймворки для фронтенда и бэкенда.
- Komodo IDE. Платформа работает со множеством языков программирования, в том числе самыми популярными JavaScript, HTML, CSS, Python, PHP. Среда имеет все возможности для удобной работы: автодополнение, отладку, тестирование, возможность предпросмотра страниц, профилировщик Python и PHP, а также инструмент для удобной работы с документами.
- Sublime Text. Возможности платформы скорее соответствуют редактору кода, но есть и некоторые функции, типичные для IDE. Автодополнение, отладку и т. д. придется подключать через плагины. При этом в Sublime Text удобно работать за счет удобной навигации, быстрого переключения между проектами и возможностями вносить изменения в нескольких местах одновременно.
- Brackets. Это редактор кода на JavaScript, HTML и CSS. Предоставляет удобную возможность для работы с проектом с автоматическим отображением изменений. Это полностью бесплатная платформа с открытым исходным кодом, ее удобно адаптировать под себя, можно подключать доступные расширения и писать новые самостоятельно.
- Atom. Редактор кода от GitHub, естественно, интегрируется с Git. Имеет встроенное автодополнение, в отличие от многих редакторов. Также предлагает различные инструменты для совместной работы и позволяет подключать дополнительные функции через расширения.
- NetBeans. Платформа для работы с кодом на Java, в базовой версии также доступны JavaScript, HTML и CSS. Поддерживает интеграцию с Git и Apache Maven. Предоставляет все базовые функции интегрированной среды, а также умное редактирование и возможность настроить сочетания клавиш, чтобы ускорить рутинные процессы.
Большинство базовых функций и популярных языков программирования либо доступны «из коробки», либо их можно подключить с помощью плагинов или расширений.
При разработке сайта, веб-приложения или интерфейса нужно регулярно тестировать результаты и отслеживать изменения. Для этого проект нужно разместить на сервере. В LITE.HOST можно заказать дешевый хостинг для сайта на WordPress, Joomla или Drupal. У нас размещают как готовые и действующие проекты, так и находящиеся в процессе создания, поэтому мы предлагаем отдельные тарифы для разработчиков. Наши цены ниже средних по Москве.
Лучшие редакторы кода и IDE для JavaScript-разработчиков
Сокращенный перевод статьи «The Most Important JavaScript Code Editors».
JavaScript-разработчикам доступен широкий ассортимент редакторов кода, обеспечивающих более эффективную и приятную работу. При этом наиболее примечательный функционал, в принципе, есть во всех самых популярных редакторах (к такому функционалу можно отнести подсветку и автодополнение кода, интеграцию git, поддержку плагинов). И, тем не менее, у большинства разработчиков есть свой любимый редактор, отличающийся от других какими-то более мелкими, но важными деталями.
Когда вы освоитесь в выбранном редакторе и научитесь пользоваться им наиболее эффективно, вам станет трудно сменить его на другой. Для такого перехода приходится, например, заново учить сочетания клавиш, а это не слишком приятно. И даже если смена редактора в долгосрочной перспективе будет способствовать большей эффективности, все равно это непросто. Поэтому стоит сразу уделить немного времени и подойти к вопросу выбора своего первого редактора серьезно. Вы должны быть уверены, что это лучшее ПО для удовлетворения ваших нужд.
Давайте рассмотрим самые популярные варианты редакторов кода для JavaScript-разработчиков.
Visual Studio Code

VSCode это бесплатный редактор кода от Microsoft. Он имеет открытый исходный код и легковесен при установке. VSCode отлично подходит для начинающих JavaScript-разработчиков, поскольку имеет хороший набор функционала «из коробки», без необходимости устанавливать дополнительные плагины. Но этот редактор популярен не только среди начинающих программистов. Он может стать идеальным выбором для более продвинутых пользователей, которым нужно просто быстро приступить к работе, не тратя лишнее время на настройки.
Уникальная особенность VSCode — возможность использовать его в браузере. Таким образом вы можете пользоваться редактором на планшете и при этом иметь такую же среду, к какой привыкли в десктопной версии. Чтобы этот функционал заработал, нужно еще настроить code-server в сети, к которой вы имеете доступ, но возиться с настройками придется только единожды, и оно того стоит.
Git здесь встроен в редактор, но интеграция не такая надежная, как в некоторых других редакторах. Например, пользователи WebStorm предпочитают применять push/merge, а не то, что предлагает VSCode.
При необходимости вы можете установить множество дополнительных фич в качестве расширений. Но не все расширения можно считать фичами. Там есть и сниппеты кода, и разные дополнения, так что выбор полезных вещей занимает некоторое время.
Если у вас возникнет какая-нибудь проблема с использованием VSCode — не беда: у этого редактора огромное сообщество пользователей, кто-нибудь из них наверняка сталкивался с чем-то подобным и публиковал решение проблемы.
Если вы не готовы раскошелиться на полномасштабную IDE и не слишком хорошо знаете, какие плагины и функции вам могут понадобиться, будет логичным решением выбрать в качестве отправной точки VSCode.
Atom

Еще один бесплатный редактор кода, Atom, был разработан GitHub. Это, собственно, специализированная версия браузера chromium, конвертированная в редактор кода. Под капотом он для поддержки плагинов использует Node.js.
Редактор Atom «из коробки» не так уж силен, но вам доступно огромное количество плагинов, благодаря которым можно получить буквально любой желаемый функционал. Создавая для себя комфортную среду разработки, вы неизбежно соберете довольно большой личный набор плагинов. Что касается работы с JavaScript, стоит, для начала, обратить внимание на следующие:
- atom-typescript,
- file-icons — для расцвечивания и назначения значков для разных типов файлов,
- atom-beautify,
- linter.
Совет: включите пакет автосохранения, чтобы редактор сохранял написанный код, когда окно редактора оказывается не в фокусе. По умолчанию эта функция выключена.
При помощи плагина teletype над одним файлом могут работать несколько человек одновременно, причем у каждого будет несколько курсоров на экране. Этот функционал можно использовать для наставничества, парного программирования или просто совместной работы. Это одна из тех особенностей, которые выделяют Atom на общем фоне.
Интеграция git в Atom реализована хорошо (было бы странно ожидать иного от ПО, разработанного GitHub). Также вам может пригодиться плагин git-plus, позволяющий запускать команды при помощи сокращений клавиш, без использования терминала git.
Atom настолько настраиваемый, что вы можете даже редактировать файл .less, чтобы подобрать наиболее приятные для себя цвета. Это существенный плюс для тех, кто любит настраивать каждую деталь своего окружения.
Скрипт .coffe, запускаемый при загрузке, позволяет быстро изменить поведение редактора.
Также вы можете писать собственные плагины на JavaScript — это важно на случай, если вам понадобится что-то совсем особенное.
Работа по написанию кода в редакторе Atom проходит достаточно плавно. Этот опыт можно сделать еще лучше при помощи плагинов, например, minimap. Но чтобы установить и настроить весь функционал таким образом, как нужно именно вам, может уйти некоторое время. Впрочем, у такого подхода есть и преимущество: в Atom не будет ненужных вам вещей, которые замедляли бы загрузку и работу редактора.
Что касается замедления — вы можете ощущать некоторую медлительность редактора при загрузке больших файлов или при переключении между вкладками.
Сначала мне нравилась идея редактирования CSS-стилей редактора или по крайней мере наличия такой возможности на случай, если я когда-то захочу создавать собственные темы. Звучит круто, но на практике создание новых тем это нетривиальный процесс. К счастью, есть много готовых вариантов на выбор. Их можно просто скачать и установить.
Atom это добротный редактор, он будет отличным выбором для многих разработчиков.
Sublime Text

Sublime Text это платный редактор с бесплатным пробным периодом. В нем нет большого количества предустановленных плагинов, но вообще эти плагины есть, во всем их разнообразии, для всяких нужд. Некоторые пакеты, такие как SideBarEnhancements (позволяющий переименовывать, перемещать, копировать и вставлять файлы и папки), пожалуй, должны быть встроены в редактор, но вы можете их скачать и установить.
Как и в случае с Atom, на первоначальную настройку этого редактора может понадобиться какое-то время. Но когда все настроено, все работает без сучка, без задоринки.
Здесь также есть функция сохранения при потере фокуса.
Sublime Text это легковесный редактор, благодаря чему он очень быстр и может работать с большими проектами и объемными файлами.
Примечательна функция Sublime Text «goto anything», которая может применяться для быстрого перехода к файлам, символам, номерам строк. Подобный функционал в той или иной форме есть в большинстве редакторов, но здесь можно комбинировать разные варианты, составляя более длинные запросы, например «fileName@functionName», а это здорово.
Выделение переменной распространяется на все экземпляры этой переменной, а ее переименование означает переименование всех переменных с этим именем. Потребность в таком функционале возникает довольно часто, так что его наличие очень улучшает опыт использования редактора.
Sublime Text во многом очень похож на Atom, но имеет преимущество по части общей производительности и отзывчивости, а это прекрасно.
VIM

Vim это бесплатный и очень настраиваемый редактор кода. Это был первый текстовый редактор, разработанный для Unix, и назывался он vi. Позже его функционал был значительно расширен — так появился Vim. Этот редактор доступен в большинстве дистрибутивов Linux.
Vim имеет функции поиска и подсветки синтаксиса, а еще он суперлегкий, так что может хорошо справляться даже с очень большими файлами. Только вот на настройку и подготовку к работе потребуется некоторое время.
Этот редактор имеет и графический интерфейс, но не по умолчанию. Даже включение поддержки мыши требует определенных манипуляций. По умолчанию Vim управляется при помощи клавиатуры и сочетаний клавиш.
Vim может быть отличным редактором, если вы настроите его под свои нужды, а также хорошо изучите его вдоль и поперек. Но если время поджимает, это, вероятно, не лучший выбор.
WebStorm

WebStorm выделяется из общего списка, потому что это полнофункциональная интегрированная среда разработки для JavaScript. Разработчик этой IDE — JetBrains.
Эта среда отлично подходит для различных платформ, таких как React, Angular, Vue.js и т. д. С ее помощью можно заниматься отладкой node-скриптов и запускать тесты на встроенном сервере. Также можно запускать и отлаживать npm-скрипты (при помощи древовидного интерфейса). И для всего этого не нужны никакие плагины.
Тем не менее, плагины доступны для некоторых более специфических функций, не встроенных в саму IDE. Но в большинстве случаев все, что вам может понадобиться, в IDE уже есть. Самое приятное в этом то, что вы можете открыть для себя новые, не известные вам прежде функции, и оценить, насколько здорово, что они есть.
В WebStorm по умолчанию настроено автосохранение файлов по ходу работы над ними. Когда после этой IDE переходишь на какой-нибудь другой редактор без подобного функционала, начинаешь остро ощущать, насколько его не хватает. Впрочем, это не уникальная особенность WebStorm, просто здесь реализация немного приятнее.
Некоторые люди не всегда доверяют отмене действий при помощи ctrl-z, но в WebStorm есть встроенная система контроля версий, делающая коммит при каждом сохранении файла. Она чисто внутренняя, совершенно отделенная от ваших git-коммитов. Файлы сохраняются как минимум в случаях, когда окно с кодом оказывается не в фокусе. Так что, если давненько не делали коммитов в git, а вам нужно вернуться и посмотреть предыдущее состояние после последнего коммита, вы можете сделать это без проблем.
К недостаткам WebStorm можно отнести то, что за нее придется платить. Кроме того, временами, при работе над очень большими проектами, он заметно съедает память. Но проект постоянно развивается и улучшается.
Заключение
Если вы начинающий программист, изучающий JavaScript, и хотите для начала использовать уже полностью готовую к работе среду, очевидным выбором для вас будет VSCode. Он прост в использовании и имеет богатый встроенный функционал.
Более опытным разработчикам, точно знающим, что им нужно, могут подойти Sublime и Atom, поскольку они дают полный контроль над средой разработки. Вы можете установить дополнительно любой из тысяч пакетов, отбирая только те из них, которые вам действительно нужны. Благодаря этому увеличивается скорость загрузки и снижается потребление ресурсов.
Пользователи, предпочитающие при работе над проектами пользоваться только клавиатурой, могут отдать предпочтение Vim. С его помощью вы сэкономите время, которое обычно уходит на перемещение кисти руки от клавиатуры к мыши. Правда, потребуется дополнительное время, чтобы научиться обходиться без последней.
Наконец, если вы согласны оплатить подписку, а ваша техника позволяет не задумываться об использовании памяти или CPU, лучшим выбором для вас будет WebStorm. С ней вы получите очень удобную среду для разработки.
JavaScript — лучший язык программирования для начинающих
JavaScript, несмотря на его многочисленные недостатки, возможно, является самым лучшим языком программирования для начинающих разработчиков, и лучшим языком, с которым могут повозиться дети.
Шёл 2007 год. Отличное издательство технических книг O’Reilly Media обратилось ко мне, предложив одну идею. Они спросили меня о том, хотел бы я написать книгу о JavaScript, которая предназначалась бы для абсолютных новичков в программировании. «С какой стати?», — тут же задал я встречный вопрос.
Нельзя было сказать, что JavaScript в те времена был совершенно бесполезным языком. Но он представлял собой лишь один, далеко не самый важный ингредиент из тщательно отобранного набора технологий, необходимых для разработки веб-сайтов. Да, небольшие кусочки JS-кода могли использоваться для проверки форм, или для того, чтобы подсвечивать кнопки, на которые наводят указатель мыши. Но JavaScript представлял собой лишь необязательное дополнение к функционалу сайта. Если убрать его со страницы, то всё продолжало работать практически так же, как и с его использованием.
JavaScript, кроме того, тянул за собой немалый багаж, представленный другими технологиями. Так, с ним были связаны проблемы несовместимости браузеров, он был медленным, небезопасным, совершенно ненадёжным. Я не был заинтересован в том, чтобы учить кого-то создавать на JavaScript бесполезные виджеты для веб-страниц. Эти виджеты казались мне такими же бессмысленными, как анимированные гифки с вращающимся земным шаром, которые были весьма популярными на заре интернета.
Самым очевидным способом использования JavaScript, как мне, по наивности, тогда казалось, было примерно следующее: большой серверный фреймворк должен сформировать весь необходимый JS-код и встроить его в страницу, предназначенную специально для вашего браузера. JavaScript-код, формируемый сервером, мог бы оказаться слишком громоздким, но он был бы предназначен для конкретной версии браузера. А учитывая то, что JS играл лишь роль вспомогательного механизма, при этом всё работало бы как надо даже в том случае, если бы посетитель сайта полностью отключил бы JavaScript.
Нет нужды говорить, что тогда я книгу о JavaScript не написал. Я продолжал заниматься серверным программированием и писать о моих любимых технологиях (как правило, о языке С# и о .NET Framework). Прошло много лет.
Затем произошло нечто странное.
JavaScript буквально «взлетел».
Я всё ещё не думаю, что JavaScript заслуживает чести называться лучшим в мире языком программирования. Я даже, если уж совсем честно, не считаю его очень хорошим языком. Но кое-в чём я своё мнение поменял. Теперь я считаю, что JavaScript, вероятно, является лучшим первым языком для детей и начинающих программистов. Всё дело в том, что у JavaScript есть одно серьёзнейшее преимущество перед всеми остальным языками программирования.
Потрясающая распространённость JavaScript — его главное преимущество
Одним из уникальных преимуществ JavaScript является его распространённость.
Этот язык можно встретить буквально повсюду. Он поддерживается на всех операционных системах, во всех видах браузеров, и на настольных компьютерах, и на мобильных устройствах. Очень важно ещё и то, что JavaScript-приложения работают без установки их на компьютеры пользователей. На самом деле, уже сложно вспомнить не такие уж и давние времена, когда компании, развёртывая клиент-серверные приложения в своих внутренних сетях, тратили недели, борясь с проблемами настройки этих приложений и с неожиданными ошибками. Столкнувшись с подобными кошмарами, вы вполне можете оценить привлекательность JavaScript.
JavaScript, благодаря его распространённости, не обязательно быть самым лучшим языком программирования. Ему всего лишь нужно быть достаточно хорошим языком.
Похожие механизмы работают и тогда, когда речь заходит об изучении программирования. Поначалу проблема распространённости языка не кажется особенно важной для того, чья цель заключается в том, чтобы изучить проверенные временем практические приёмы разработки программ. Но множество тех же самых проблем актуальны, как и для профессионального программирования, в обучении программированию. Если вы хотите, чтобы тем, что вы создали, мог бы воспользоваться кто угодно, то JavaScript — это единственная альтернатива.
Предположим, вы разрабатываете замечательное приложение, которое, задавая пользователю вопросы, определяет его личностный профиль. Настроить среду разработки довольно просто. Но что произойдёт, когда вы захотите отправить свою программу товарищу? Понадобится ли ему устанавливать у себя среду времени выполнения или воссоздавать ту же среду разработки, что и у вас? Нужно ли будет «подкрутить» настройки безопасности его компьютера прежде чем он сможет загрузить и установить вашу программу? Может быть, ваш товарищ использует операционную систему, которая попросту не поддерживает вашу программу, или мобильную платформу, на которую, если не вдаваться в детали, можно устанавливать только профессиональные приложения, распространяемые через iTunes или Google Play? Если же вы, для разработки программы, используете JavaScript, а для её распространения — простой веб-сайт (например, GitHub позволяет бесплатно создавать подобные сайты), то все эти проблемы попросту исчезнут.
А если наш будущий программист — ребёнок, то вот вам неопровержимый факт: дети и браузеры очень сильно связаны. Если вы наблюдали за ребёнком, который работает на компьютере (не на мобильном устройстве), то вы, возможно, заметили, что он как минимум 98% времени тратит на работу с браузером. Дети играют в браузерные игры, используют социальные сети, занимаются школьными делами в Google Classroom и Google Docs. И если код, который пишут дети, будет работать в родном для них браузерном мире, это будет совершенно естественно.
Сейчас мы обсуждали сильные стороны JavaScript. Но, конечно, говоря о JavaScript как о языке программирования для начинающих, нельзя не вспомнить и о его недостатках.
Недостатки JavaScript
Как насчёт проблем JavaScript? У этого языка есть серьёзные недостатки, его причуды, противоречия и ограничения могут быть крайне неприятными для того, кто только начинает изучать программирование. К счастью, существуют современные решения, которые могут сгладить большинство недостатков JavaScript.
Разберём четыре основные претензии, предъявляемые к этому языку.
1. Проблема работы с типами данных в JavaScript
Важнейшей концепцией, которую начинающие программисты осваивают очень рано, является идея переменных, контейнеров, которые хранят информацию во время работы программы. Проблема JavaScript заключается в том, что этот язык слишком вольно и неаккуратно обращается с переменными. Он позволяет делать то, что не выглядит правильным, и игнорирует очевидные нестыковки. Его халатность способна превращать незначительные опечатки в катастрофы, нарушающие работу программ.
Вот пример кода, который обречён на провал:
Увидели ошибку? Во второй строке, на самом деле, используются две переменных: переменная myNumber , которая была объявлена в первой строке, и некая фиктивная переменная myNumbr . Мы знаем о том, что вторая переменная — это результат опечатки, но JavaScript сообщит нам об этом только во время выполнения программы, выдав сообщение об ошибке, которое выглядит как ReferenceError: myNumbr is not defined . То же самое происходит и в том случае, если при записи имени переменной перепутали большие и маленькие буквы (например, переменная из myNumber случайно превратилась в MyNumber ). Проблема, но уже другого характера, может возникнуть и в том случае, если вы, считая, что некая переменная хранит число, прибавляете к ней другое число, а эта переменная, на самом деле, содержала строку или что-нибудь другое. JavaScript в таком случае не сообщит об ошибке, но результат вычислений будет совсем не таким, какого можно ожидать от сложения двух чисел. Каждый JavaScript-разработчик может вспомнить неприятную историю такого рода, когда путаница с типами вызывала странные ошибки в программах.
Достаточно сложно учиться программировать, и, в то же время, беспокоиться о том, как изучаемый язык программирования может вам навредить. Но, к счастью, проблемы безопасной работы с типами данных легко можно решить с помощью подходящих инструментов разработки.
Один из моих любимых редакторов кода, который подходит и для изучения программирования, и для профессионального использования — это Visual Studio Code. Он бесплатен, нетребователен к ресурсам, его код открыт, его можно практически до бесконечности расширять. Одна из его самых замечательных возможностей заключается в поддержке организации проверки JavaScript-кода на наличие в нём распространённых проблем средствами TypeScript. Включить такую проверку можно, воспользовавшись соответствующим конфигурационный файлом или вставив следующий комментарий в верхнюю часть JavaScript-файла:
// @ts-check
Вот пример, в котором имеются две ошибки, ни одна из которых, с точки зрения JavaScript, ошибкой не является.
Если добавить в начало этого файла комментарий // @ts-check , то VS Code выделит строки кода, которые содержат потенциальные ошибки.
Если навести указатель мыши на выделенную строку, появится всплывающее окно, содержащее объяснение проблемы.
Какие из этого можно сделать выводы? Хотя JavaScript толерантно относится ко многим нехорошим вещам, если скомбинировать JavaScript с качественным редактором кода и с правильными дополнительными инструментами, можно создать среду разработки, похожую на те, которыми обладают другие современные языки программирования. В результате разработка на JavaScript оказывается такой же удобной, как и на других языках, и, естественно, другие его преимущества никуда не деваются.
2. JavaScript не поддерживает ООП
Объектно-ориентированное программирование (ООП) — это подход к моделированию и организации кода. Если методики ООП применяются правильно, они помогают программисту создавать простой и хорошо организованный код. Кроме того, ООП упрощает повторное использование важных функциональных возможностей программ.
JavaScript печально известен отсутствием поддержки объектно-ориентированного программирования. На самом деле, JavaScript-разработчики традиционно обходят этот недостаток, используя всяческие странные конструкции. Эти конструкции могут что-то значить для того, кто уже изучал ООП (и даже для того, кто не изучал, а просто скопировал в свой код некий шаблон и привык с ним работать). Но если вы — совершенно новый человек в программировании, использование подобных сомнительных конструкций, реализующих базовые концепции программирования — это совершенно неправильно.
К счастью, существуют красивые решения, обеспечивающие поддержку ООП в JavaScript. Моё любимое решение такого рода — это TypeScript — опенсорсный проект, запущенный Microsoft в 2012 году. TypeScript представляет собой нечто вроде улучшенной разновидности JavaScript, которая поддерживает ООП (а также многие другие полезные возможности вроде строгой проверки типов).
Кто-то может сказать, что мы говорим о JavaScript, и что TypeScript — это, всё же, не JavaScript. И, на самом деле, это так. Но вот одна интересная деталь. Код пишут на TypeScript, а затем конвертируют его в JavaScript перед тем, как он будет выполняться. Это позволяет пользоваться всем лучшим из миров TypeScript и JavaScript. Если вы выберете TypeScript, то у вас будет современный язык программирования, на котором вы сможете писать свой код, и та широчайшая поддержка, которой пользуется обычный JavaScript.
И, что приятнее всего, преобразование TypeScript-кода в JavaScript производится автоматически. Конечно, в сгенерированном компьютером JavaScript-коде используются, для отражения в нём концепций, реализованных средствами TypeScript, довольно громоздкие конструкции, но это ничего не меняет. Программист изучает концепции ООП, а готовый код правильно работает, без проблем обрабатываясь средствами современных компьютеров.
Не верите? Тогда подумайте о том, что некоторые из самых современных инновационных настольных приложений используют комбинацию из TypeScript и Electron — фреймворка, который позволяет выполнять JavaScript-код за пределами традиционного браузера (хотя надо отметить, что Electron пользуется браузерными возможностями). Один из наиболее впечатляющих примеров подобного приложения — это редактор VS Code. Получается, что тот самый инструмент, с помощью которого очень удобно писать JavaScript-код, сам написан на JavaScript. Правда, если говорить точнее, то VS Code написан на TypeScript, но код, написанный на этом языке, всё равно, преобразуется в JavaScript-код.
Конечно, изучая программирование вовсе необязательно использовать TypeScript, и новые JavaScript-программисты, если решат так поступить, смогут сделать очень многое, не изучая принципы ООП. Это, на самом деле, вопрос выбора. В любом случае, можно отметить, что JavaScript — язык динамично развивающийся, и в него постепенно добавляются возможности, сближающие его со всем тем ценным, что есть в TypeScript.
3. Вокруг полно некачественного JavaScript-кода
Что тут сказать. Некачественный код можно написать на любом языке программирования. Слышали когда-нибудь про Visual Basic?
4. Для JavaScript-разработки нужны дополнительные библиотеки и фреймворки
Для того чтобы получить доступ к более широкому, чем есть в языке, набору функциональных возможностей (и не изобретать велосипеды), JavaScript-программистам нужно использовать библиотеки и фреймворки сторонних разработчиков. Выбор правильных ингредиентов, используемых при создании некоего проекта — это не так просто, как может показаться на первый взгляд. Речь идёт, в частности, о том, что выбранные дополнительные инструменты должны правильно решать поставленные перед ними задачи, нужно, чтобы у программиста была бы уверенность в том, что они ещё долго будут пользоваться поддержкой своих разработчиков, нужно, чтобы они не конфликтовали друг с другом.
С некоей разновидностью этой проблемы сталкиваются и разработчики, использующие другие языки. Однако надо отметить, что немногие языки страдают от этой проблемы так же сильно, как JavaScript. Для того чтобы стать серьёзным программистом в открытом для всех JavaScript-мире, нужно собрать собственный набор инструментов разработки. При этом каждый из возможных вариантов выбора настолько сложен и многогранен, что понять, подходит ли вам, скажем, какая-то библиотека, можно только очень хорошо её изучив (а когда вы её изучите, может оказаться так, что она уже потеряет актуальность и на её место придёт что-то новое, притягивающее, возможно — на короткое время, всеобщий интерес).
Каким бы печальным всё это ни было, эти проблемы, на самом деле, не влияют на новичков. Если некто изучает программирование с использованием JavaScript, то ему лучше всего держаться в стороне от фреймворков и библиотек, идёт ли речь о чём-то широко известном, вроде jQuery, Angular, React или Vue, или о чём-то изобретённом в тот момент, когда было написано это предложение, или в ту секунду, когда была опубликована эта статья. Конечно, новичок, хорошо освоив фундаментальные вещи, вероятно, захочет ознакомиться, как минимум, с одним из популярных дополнительных инструментов. Но это — уже совсем другая история.
Итоги
На самом деле, выбор первого языка программирования — это вопрос, на который невозможно найти абсолютно правильный ответ. Автор этого материала поделился здесь лишь собственным мнением на этот счёт, привёл примеры, которые близки ему в силу его опыта и предпочтений. Но, в любом случае, все программисты с чего-то начинают, и каким бы сложным ни был бы выбор первого языка, это выбор, всё равно, приходится делать.
Дизайн кода: организация JavaScript
Великолепный дизайн — это результат заботливого и внимательного отношения к тому, что важно, который в итоге приводит к полезному, понятному и, надо надеяться, красивому интерфейсу. Не обманывайте себя, дизайн это удел не только дизайнеров.
Существует множество дизайнерских решений в программировании, и говоря это, я подразумеваю дизайн не пользовательского интерфейса, а дизайн самого кода.
Хорошо спроектированный код намного легче поддерживать, улучшать и расширять, что позволяет разработчикам быть эффективнее. Это приводит к тому, что больше внимания и энергии будет потрачено на значимые вещи, что в свою очередь осчастливит всех — пользователей, разработчиков, все заинтересованные стороны.
Существуют три действительно важных высокоуровневых, языконезависимых аспекта дизайна кода:
- Архитектура — программная база для всего кода. Правила, определяющие, как различные компоненты (модель, представление и контроллер) взаимодействуют друг с другом.
- Поддерживаемость – насколько хорошо код может быть улучшен или расширена его функциональность?
- Повторное использование — насколько возможно повторное использование отдельных компонентов приложения? Насколько гибка в настройке каждая отдельная реализация каждого компонента?
В менее удачных языках, например в JavaScript, для написания удобного и приятного кода потребуется немного самодисциплины. JavaScript-окружение настолько дружелюбно к разработчику, что можно «разбросать» куски кода по разным углам вашего приложения — устроить настоящий бардак, но тем временем приложение всё равно будет работать. Грамотное планирование и разработка архитектуры на раннем этапе развития (и следование ей в дальнейшем) привнесёт в ваш код ограничения, которые позволят вам добиться согласованности.
Я хочу показать вам один проверенный временем паттерн разработки, которым горжусь — паттерн «Модуль», чья расширяемая структура дополнит вашу архитектуру до состояния стройной, поддерживаемой и расширяемой программной базы. Мне нравится создавать модули с помощью системы jQuery-плагинов, так как это обеспечивает удивительную возможность повторного использования, набор удобных опций и превосходно созданное API.
Ниже по тексту я расскажу вам, как писать ваш код организуя его в модули, которые можно будет использовать в ваших следующих проектах.
Паттерн «Модуль»
Существует множество паттернов разработки и не меньше ресурсов, где с ними можно ознакомиться. Эдди Османи (Addy Osmani) написал потрясающую (бесплатную!) книгу о паттернах в JavaScript, которую я настоятельно рекомендую разработчикам любого уровня.
Паттерн Модуль позволяет структурировать ваш код и поддерживать его в хорошо организованном состоянии. «Модуль» это обычный объект, который содержит методы и свойства. Лучшее в нём — его простота: даже тот, кто не знаком с классическими паттернами разработки, посмотрев на него, сможет понять, как он работает.
В приложениях, которые используют этот паттерн, каждый компонент заключен в собственный модуль. Например, чтобы добавить функцию автодополнения текста, вы создаёте модуль, который работает с текстовым полем, и модуль для списка вариантов дополнения. Эти два модуля будут работать вместе, но модуль, который работает с текстовым полем, не работает со списком вариантов и наоборот.
Именно из-за такого разделения задач компонентов паттерн «модуль» отлично подходит для создания надёжной архитектуры системы. Отношения внутри приложения чётко определены. Всё, что касается текстового поля, выполняется с помощью соответствующего модуля, функционал не рассредоточен по всему коду и, как результат, остаётся чистым.
Ещё одним достоинством модульной организации является простота её поддержки. Модули можно улучшать и оптимизировать независимо, не затрагивая никаких других частей приложения.
Я использовал паттерн «Модуль» для создания структуры jPanelMenu, плагина jQuery, который создаёт меню, скрывающееся за пределами экрана. Именно его я и использую для того, чтобы проиллюстрировать процесс создания модуля.
Создание модуля
Сначала я определяю три метода и свойство, которые определяют взаимодействие с меню.
var jpm = < animated: true, openMenu: function( ) < … this.setMenuStyle( ); >, closeMenu: function( ) < … this.setMenuStyle( ); >, setMenuStyle: function( ) < … >>;
Идея заключается в том, чтобы разбить код на минимальные блоки, пригодные для повторного использования. Я мог бы просто написать метод toggleMenu() , но создание методов openMenu() и closeMenu() обеспечивает лучший контроль и большие возможности повторного использования внутри модуля.
Обратите внимание, что обращения к методам и свойствам внутри модуля (например, вызов setMenuStyle() ) происходят с использованием this .
Это основная структура модуля. Можно продолжать добавлять методы и свойства, но это будет не сложнее, чем добавление тех, что уже есть. После того, как структура готова, на её основе можно добавить то, что нужно для повторного использования модуля: настройки и API.
jQuery-плагины
Третий аспект проектирования кода, возможно, самый важный: пригодность его к повторному использованию. И тут есть подвох. Да, можно написать на чистом JavaScript и внедрить модули, пригодные для повторного использования (мы на 90% закончили модуль, который описан выше), но я по ряду причин предпочитаю для более сложных вещей использовать jQuery-плагины.
Самая важная из этих причин заключается в ненавязчивых связях. Если для построения компонента используется jQuery, то очевидно, что для его имплементации он нужен.
Кроме того, код, с помощью которого вы имплементируете компонент, будет однороден с остальным кодом проекта, использующего jQuery. Это хорошо с точки зрения эстетики и, кроме того, делает код предсказуемым: разработчик сможет понять как работать с плагином без длительного изучения документации. Это ещё один способ создать удобный для разработчиков интерфейс.
Прежде чем начать писать jQuery-плагин, нужно удостовериться, что он не конфликтует с другими JavaScript библиотеками, которые используют $ -нотацию. Это проще, чем может показаться:
(function($) < // код jQuery-плагина >)(jQuery);
Плагин это просто метод, определённый в объекте jQuery. Помещаем уже созданный нами модуль внутрь него.
(function($) < $.jPanelMenu = function( ) < var jpm = < animated: true, openMenu: function( ) < … this.setMenuStyle( ); >, closeMenu: function( ) < … this.setMenuStyle( ); >, setMenuStyle: function( ) < … >>; >; >)(jQuery);
Всё, что нужно для вызова плагина — вызвать созданную вами функцию.
var jpm = $.jPanelMenu( );
Настройки
Настройки необходимы для любого приспособленного для повторного использования плагина, ведь они позволяют приводить его к требованиям каждого конкретного проекта, который несёт с собой массу специфических стилей, способов взаимодействия и структур данных.
Считается хорошим тоном по умолчанию устанавливать в настройках хорошо продуманные значения. Самый простой способ это сделать — использовать метод jQuery $.extend( ) , который принимает 2 и более аргументов.
В качестве первого аргумента $.extend( ) передаётся объект, содержащий все настраиваемые свойства и их значения по умолчанию. В качестве второго аргумента передаётся объект, который содержит настройки, переданные пользователем. Метод $.extend() объединит эти два объекта, перезаписывая стандартные настройки теми, которые передал пользователь.
(function($) < $.jPanelMenu = function(options) < var jpm = < options: $.extend(< 'animated': true, 'duration': 500, 'direction': 'left' >, options), openMenu: function( ) < … this.setMenuStyle( ); >, closeMenu: function( ) < … this.setMenuStyle( ); >, setMenuStyle: function( ) < … >>; >; >)(jQuery);
В то время как вы предоставляете полезные стандартные настройки для вашего плагина, сами настройки своими названиями могут объяснять своё предназначение, что позволяет понять, что делает код с первого взгляда.
Старайтесь предоставлять все настройки, которые могут понадобиться разработчику. Гибкость поможет внедрять плагин в последующие проекты, и, к тому же, гибкие настройки никогда не причиняли вреда.
API
Настройки — отличный способ контролировать поведение плагина. API, с другой стороны, позволяет расширять его функциональные возможности, предоставляя доступ к свойствам и методам в процессе имплементации.
Хорошо, когда API дает максимум возможностей, однако не стоит давать доступ ко всем внутренним методам и свойствам. В идеале вам стоит предоставить доступ только к тем из них, которые будут реально использоваться.
В нашем примере API должен содержать методы, которые позволят открыть и закрыть меню, ничего более. Внутренний метод setMenuStyle() вызывается, когда меню открывается или закрывается, но публичный доступ к нему не нужен.
Чтобы дать доступ к API, нужно сделать так, чтобы в конце кода плагина возвращался объект с его методами и свойствами. Можно даже связать эти методы и свойства с теми, которые используются внутри модуля, именно в этом случае достоинства паттерна «Модуль» видны лучше всего.
(function($) < $.jPanelMenu = function(options) < var jpm = < options: $.extend(< 'animated': true, 'duration': 500, 'direction': 'left' >, options), openMenu: function( ) < … this.setMenuStyle( ); >, closeMenu: function( ) < … this.setMenuStyle( ); >, setMenuStyle: function( ) < … >>; return < open: jpm.openMenu, close: jpm.closeMenu, someComplexMethod: function( ) < … >>; >; >)(jQuery);
Методы и свойства API будут доступны из объекта, который возвращается при инициализации плагина.
var jpm = $.jPanelMenu(< duration: 1000, … >); jpm.open( );
Улучшение интерфейсов
Чтобы облегчить себе жизнь, мы, руководствуясь простыми правилами, создали расширяемый, подходящий для повторного использования плагин. Поэкспериментируйте, чтобы разобраться, подходит ли он вам и вашей команде, вписывается ли в рамки вашего рабочего процесса.
Каждый раз, когда пишу код, который вероятно можно будет использовать повторно, я создаю модульный jQuery-плагин. Лучшее в этом подходе то, что он заставляет использовать и тестировать написанный вами код, и в процессе вы быстро выясняете его сильные стороны и недостатки, а значит, можете планировать изменения.
В результате на выходе у нас оттестированный, готовый к открытию для сторонних разработчиков или продаже код. Свои лучшие плагины я выложил на GitHub.
О дизайне кода важно думать даже если вы разрабатываете что-то, что не будет реально использоваться. В будущем вы будете благодарны себе за это.
