Почему REPL Node.js такие, какие они есть, и что происходит, когда нечего оценивать

Если вы потратили время на изучение консоли вашего браузера или инструмента командной строки Node.js в своем терминале, вы могли заметить странное поведение, связанное с распространенным методом JavaScript. Если вы введете console.log() в терминал, вы вернете два значения, хотя, возможно, вы ожидали получить только одно.

Первое напечатанное значение, если вы введете console.log(‘hello world’), будет ‘hello world’. Как раз то, что вы ожидали, верно?

Однако, посмотрев на следующую строку, вы увидите второе возвращаемое значение «undefined». Почему существует второе значение, если все, что мы просили и ожидали, было нашим значением «hello world?»

Это связано с природой REPL, которые представляют собой инструменты командной строки, которые языки сценариев используют для создания изолированной программной среды на основе команд.

Что такое REPL?

Вам может быть интересно, что такое REPL? Эта аббревиатура расшифровывается как Read, Evaluate, Print, Loop. REPL — это инструмент среды кодирования, который является общей чертой языков сценариев. Независимо от того, получаете ли вы к нему доступ с помощью «irb» для Ruby, «node» для JavaScript или «python» для Python, вход в REPL создает среду «песочницы», в которой вы можете исследовать свой код.

Это исследование может включать в себя наблюдение за встроенными классами и функциями, построение и тестирование функций или даже оценку как простых, так и сложных выражений. Если вы знакомы с концепцией PEMDAS в математике, то REPL будет иметь смысл.

REPL работают простым, рутинным образом. Во-первых, они читают любой код, который вы ввели в своем текущем выражении терминала, используя язык, родной для вашей версии REPL. Если вы используете REPL Node.js, ваш REPL будет читать код как JavaScript.

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

После того, как основные оценки были выполнены, мы печатаем то, что REPL было проинформировано для печати. Это оценка элементов, которые будут выведены на консоль и могут быть console.log() (или любой разновидностью console.*) для JavaScript, puts или pp для Ruby или print для Python.

Последний шаг REPL — зацикливание. Нет, это не относится к циклам for или while. Что мы имеем в виду под циклом, так это то, что после того, как все ваши операторы или код были прочитаны, оценены и любая информация напечатана, мы возвращаемся в состояние, в котором компьютер готов к дальнейшему вводу. Таким образом, после того, как каждый бит кода, который вы вводите в REPL, прочитан, оценен и напечатан, компьютер готовится к выполнению дополнительных операций.

REPL — очень удобный инструмент для проверки концепций моделей или проверки вывода из пользовательских интерфейсов. Как правило, они очень полезны для внутренней работы, в которой у вас нет визуальных средств, подтверждающих, что то, что вы делаете, производит предполагаемый продукт. Теперь вернемся к JavaScript.

Почему REPL в Node.js такие, какие они есть

Теперь, когда мы лучше понимаем, что такое REPL, давайте вернемся к нашему неопределенному возвращаемому значению для console.log(). Когда мы вызываем console.log() из консоли браузера или терминала, мы действительно вызываем его из JavaScript REPL.

С нашим новым пониманием того, что такое REPL и как они работают, мы можем работать над процессом console.log(“Hello, Daniel!”). Во-первых, REPL будет читаться в нашей команде как JavaScript. Затем он попытается оценить части нашей команды. Шаг оценки всегда будет что-то возвращать, например, сумму 2 + 2 или измененный массив, но в этом случае оценивать нечего. Поэтому он возвращает undefined.

Чтение и оценка завершены, поэтому теперь нам нужно напечатать то, что мы сказали компьютеру напечатать. В нашем случае мы сказали нашему REPL напечатать “Hello, Daniel!”, поэтому REPL перемещается, чтобы напечатать это на консоли. И с этим мы готовы вернуться к состоянию, когда REPL может принять наш следующий набор инструкций. Легкий!

Заключение

Теперь у вас должно быть понимание того, что такое REPL и, в частности, как REPL работают для Node.js. Я надеюсь, что вы сможете использовать эти базовые знания, чтобы чувствовать себя более уверенно во время сеансов песочницы Node.js или для более быстрого изучения нового языка с помощью его REPL. Дайте мне знать в комментариях о любых забавных вещах, которые вы узнали, работая над REPL вашего языка.

Ссылки

Создавайте компонуемые веб-приложения

Не создавайте веб-монолиты. Используйте Bit для создания и компоновки несвязанных программных компонентов — в ваших любимых фреймворках, таких как React или Node. Создавайте масштабируемые и модульные приложения с мощными и приятными возможностями разработки.

Перенесите свою команду в Bit Cloud, чтобы совместно размещать и совместно работать над компонентами, а также значительно ускорить, масштабировать и стандартизировать разработку в команде. Начните с компонуемых интерфейсов, таких как Design System или Micro Frontends, или исследуйте компонуемый сервер. Попробуйте →

Узнать больше