10 концепций JavaScript, которыми должен овладеть каждый разработчик Node

Node.js в рекордно короткие сроки прошел путь от нестандартной идеи до основного продукта. Сегодня это стандарт де-факто для создания веб-приложений, системного программного обеспечения и многого другого. Серверные фреймворки Node, такие как Express, инструменты для сборки цепочки, такие как Webpack, и множество утилит для любых нужд делают Node чрезвычайно популярным способом использовать мощь и выразительность JavaScript на внутреннем уровне.

Хотя сейчас Node конкурирует с Deno и Bun, он остается флагманской платформой JavaScript на сервере.

Своей огромной популярностью Node во многом обязана JavaScript. JavaScript - это мультипарадигмальный язык, который поддерживает множество различных стилей программирования, включая функциональное программирование, реактивное программирование и объектно-ориентированное программирование. Это позволяет разработчику быть гибким и использовать преимущества различных стилей программирования.

Но JavaScript может быть обоюдоострым мечом. Мультипарадигмальная природа JavaScript означает, что почти все можно изменять. Таким образом, при написании кода Node.js нельзя отмахиваться от вероятности мутации объектов и областей видимости. Поскольку в JavaScript отсутствует оптимизация хвостовых вызовов (которая позволяет рекурсивным функциям повторно использовать кадры стека для рекурсивных вызовов), опасно использовать рекурсию для больших итераций. Кроме того, Node является однопоточным, поэтому разработчикам необходимо писать асинхронный код. Node также страдает от общих для всех языков проблем, таких как проглатывание ошибок.

JavaScript может быть благом, если использовать его осторожно, и бедой, если вы будете безрассудны. Следование структурированным правилам, паттернам проектирования, ключевым концепциям и основным правилам большого пальца поможет вам выбрать оптимальный подход к решению проблемы. Какие ключевые концепции должны понимать программисты Node.js? Вот 10 концепций JavaScript, которые, по моему мнению, наиболее важны для написания эффективного и масштабируемого кода Node.js.

Закрытия в JavaScript

Замыкание в JavaScript - это внутренняя функция, которая имеет доступ к области видимости своей внешней функции, даже после того, как внешняя функция вернула управление. Закрытие делает переменные внутренней функции приватными. Функциональное программирование набирает популярность, что делает закрытия неотъемлемой частью набора разработчика Node. Вот простой пример закрытия в JavaScript:

Переменной count присваивается внешняя функция. Внешняя функция запускается только один раз, устанавливает счетчик в ноль и возвращает внутреннюю функцию. Доступ к переменной _counter может получить только внутренняя функция, поэтому она ведет себя как приватная переменная.

Приведенный здесь пример - это функция высшего порядка (или метафункция, функция, которая принимает или возвращает другую функцию). Замыкания встречаются и во многих других приложениях. Закрытие происходит, когда вы определяете функцию внутри другой функции, и внутренняя функция получает как свою собственную область видимости, так и доступ к родительской области видимости - то есть внутренняя функция может "видеть" внешние переменные, но не наоборот.

Это также удобно при использовании функциональных методов типа map(innerFunction), когда innerFunction может использовать переменные, определенные во внешней области видимости.

Прототипы JavaScript

У каждой функции JavaScript есть свойство prototype, которое используется для прикрепления свойств и методов. Это свойство не является перечислимым. Оно позволяет разработчику прикреплять методы или функции-члены к своим объектам. JavaScript поддерживает наследование только через свойство prototype. В случае унаследованного объекта свойство prototype указывает на родителя объекта. Обычный подход к прикреплению методов к функции заключается в использовании прототипов, как показано здесь:

Хотя современный JavaScript имеет довольно сложную поддержку классов, он по-прежнему использует систему прототипов под капотом. Именно она является источником большей части гибкости языка.

Определение приватных свойств с помощью хэш-имен

В старые добрые времена для обозначения приватности переменных использовался префикс с подчеркиванием. Однако это было лишь предложение, а не ограничение, накладываемое платформой. Современный JavaScript предлагает хэштеги приватных членов и методов для классов:

Приватные имена хэшей - это новая и очень желанная возможность в JavaScript! Последние версии Node и браузеров поддерживают ее, а инструменты Chrome devtools позволяют напрямую обращаться к приватным переменным.

Определение приватных свойств с помощью закрытий

Еще один подход, который иногда можно встретить, чтобы обойти отсутствие приватных свойств в системе прототипов JavaScript, - это использование закрытия. Современный JavaScript позволяет определять приватные свойства с помощью префикса хэштега, как показано в примере выше. Однако это не работает в системе прототипов JavaScript. Кроме того, этот прием часто встречается в коде, и важно понимать, что он делает.

Определение приватных свойств с помощью закрытий позволяет имитировать приватную переменную. Функции-члены, которым нужен доступ к приватным свойствам, должны быть определены на самом объекте. Вот синтаксис для создания приватных свойств с помощью закрытий:

Модули JavaScript

Когда-то в JavaScript не было системы модулей, и разработчики придумывали хитроумные трюки (так называемый шаблон модуля), чтобы создать что-то, что будет работать. По мере развития JavaScript он породил не одну, а две системы модулей: синтаксис CommonJS include и синтаксис ES6 require.

Node традиционно использует CommonJS, в то время как браузеры используют ES6. Однако последние версии Node (за последние несколько лет) также поддерживают ES6. Сейчас тенденция заключается в использовании модулей ES6, и когда-нибудь у нас будет только один синтаксис модулей, который будет использоваться во всем JavaScript. ES6 выглядит следующим образом (где мы экспортируем модуль по умолчанию, а затем импортируем его):

Вы по-прежнему будете видеть CommonJS, и иногда вам понадобится использовать его для импорта модуля. Вот как выглядит экспорт, а затем импорт модуля по умолчанию с помощью CommonJS:

Работа над ошибками

Независимо от того, на каком языке или в какой среде вы работаете, обработка ошибок необходима и неизбежна. Node не является исключением. Существует три основных способа работы с ошибками: блоки try/catch, отбрасывание новых ошибок и обработчики on().

10 концепций JavaScript, которыми должен овладеть каждый разработчик Node
Понравилась новость? Тогда не забудь оставить свой комментарий.
А так же, добавь наш сайт в закладки (нажми Ctrl+D), не теряй нас.
20 февраля 2024 г.
45

Комментарии

Оставить комментарий:
* отправляя форму, я даю согласие на обработку персональных данных

Читайте еще

Продолжаем добавлять языки программирования для Вас.
Впереди много интересного!

Только свежие новости программирования и технологий каждый день.