Как использовать REPL Node.js

Автор выбралOpen Internet/Free Speech Fund для получения пожертвования в рамках программыWrite for DOnations.

Вступление

Node.jsRead-Eval-Print-Loop (REPL) - это интерактивная оболочка, обрабатывающая выражения Node.js. Код JavaScript оболочкиreads, который вводит пользователь,evalоценивает результат интерпретации строки кода,prints результат пользователю иloops, пока пользователь не подаст сигнал о выходе .

REPL поставляется вместе с каждой установкой Node.js и позволяет вам быстро тестировать и исследовать код JavaScript в среде Node без необходимости сохранять его в файле.

Предпосылки

Для завершения этого урока вам понадобится:

[[step-1 -—- start-and-stop-the-repl]] == Шаг 1. Запуск и остановка REPL

Если у вас установленnode, то у вас также есть REPL для Node.js. Чтобы запустить его, просто введитеnode в оболочке командной строки:

node

Это приводит к подсказке REPL:

>

Символ> сообщает, что вы можете ввести код JavaScript, который будет немедленно оценен.

Например, попробуйте добавить два числа в REPL, набрав это:

> 2 + 2

Когда вы нажимаетеENTER, REPL оценивает выражение и возвращает:

4

Чтобы выйти из REPL, вы можете ввести.exit, или нажатьCTRL+D один раз, или нажатьCTRL+C дважды, что вернет вас в командную строку оболочки.

Начав и остановившись, давайте посмотрим, как вы можете использовать REPL для выполнения простого кода JavaScript.

[[шаг-2 -—- выполнение-кода-в-узле-js-repl]] == Шаг 2 - Выполнение кода в реплике Node.js

REPL - это быстрый способ тестирования кода JavaScript без необходимости создания файла. Почти все допустимые выражения JavaScript или Node.js могут быть выполнены в REPL.

На предыдущем шаге вы уже опробовали добавление двух чисел, а теперь попробуем разделить. Для этого запустите новый REPL:

node

В командной строке введите:

> 10 / 5

НажмитеENTER, и на выходе будет2, как и ожидалось:

2

REPL также может обрабатывать операции со строками. Concatenate следующие строки в REPL, набрав:

> "Hello " + "World"

Снова нажмитеENTER, и будет вычислено строковое выражение:

'Hello World'

[.note] #Note: Вы могли заметить, что в выводе использовались одинарные кавычки вместо двойных кавычек. В JavaScript кавычки, используемые для строки, не влияют на ее значение. Если в строке, которую вы ввели, использовалась одинарная кавычка, REPL достаточно умен, чтобы использовать двойные кавычки в выводе.
#

Функции вызова

При написании кода Node.js сообщения обычно выводятся с помощью глобального методаconsole.log или аналогичногоfunction. Введите в командной строке следующее:

> console.log("Hi")

НажатиеENTER дает следующий результат:

Hi
undefined

Первым результатом является выводconsole.log, который выводит сообщение в потокstdout (экран). Посколькуconsole.log печатает строку, а не возвращает строку, сообщение отображается без кавычек. undefined - это возвращаемое значение функции.

Создание переменных

Редко вы просто работаете с литералами в JavaScript. Создание переменной в REPL работает так же, как и работа с файлами.js. Введите в командной строке следующее:

> let age = 30

НажатиеENTER приводит к:

undefined

Как и раньше, сconsole.log, возвращаемое значение этой команды -undefined. Переменнаяage будет доступна, пока вы не выйдете из сеанса REPL. Например, вы можете умножитьage на два. Введите в командной строке следующее и нажмитеENTER:

> age * 2

Результат:

60

Поскольку REPL возвращает значения, вам не нужно использоватьconsole.log или аналогичные функции, чтобы увидеть результат на экране. По умолчанию любое возвращаемое значение будет отображаться на экране.

Многострочные блоки

Многострочные блоки кода также поддерживаются. Например, вы можете создать функцию, которая добавляет 3 к данному числу. Запустите функцию, набрав следующее:

> const add3 = (num) => {

Затем нажатиеENTER изменит подсказку на:

...

REPL заметил открытую фигурную скобку и поэтому предполагает, что вы пишете более одной строки кода, который должен иметь отступ. Чтобы было легче читать, REPL добавляет 3 точки и пробел в следующей строке, поэтому следующий код выглядит с отступом.

Введите вторую и третью строки функции по очереди, нажимаяENTER после каждой:

... return num + 3;
... }

НажатиеENTER после закрывающей фигурной скобки отобразитundefined, которое является «возвращаемым значением» присвоения функции переменной. Приглашение... исчезло, а приглашение> вернется:

undefined
>

Теперь вызовитеadd3() для значения:

> add3(10)

Как и ожидалось, на выходе получается:

13

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

[[step-3 -—- mastering-repl-shortcuts]] == Шаг 3. Освоение горячих клавиш REPL

REPL предоставляет ярлыки для уменьшения времени кодирования, когда это возможно. Он хранит историю всех введенных команд и позволяет нам их циклически повторять и, при необходимости, повторять команду.

Например, введите следующую строку:

"The answer to life the universe and everything is 32"

Это приводит к:

'The answer to life the universe and everything is 32'

Если мы хотим отредактировать строку и изменить «32» на «42», в командной строке используйте клавишу со стрелкойUP, чтобы вернуться к предыдущей команде:

> "The answer to life the universe and everything is 32"

Переместите курсор влево, удалите3, введите4 и снова нажмитеENTER:

'The answer to life the universe and everything is 42'

Продолжайте нажимать клавишу со стрелкойUP, и вы вернетесь назад по своей истории до первой использованной команды в текущем сеансе REPL. Напротив, нажатиеDOWN приведет к переходу к последним командам в истории.

Когда вы закончите маневрировать в своей истории команд, нажимайтеDOWN несколько раз, пока вы не исчерпаете свою недавнюю историю команд и снова не увидите приглашение.

Чтобы быстро получить последнее оцененное значение, используйте символ подчеркивания. В командной строке введите_ и нажмитеENTER:

> _

Ранее введенная строка появится снова:

'The answer to life the universe and everything is 42'

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

> Math.sq

Затем нажмите клавишуTAB, и REPL выполнит автозаполнение функции:

> Math.sqrt

Когда есть несколько возможностей для автозаполнения, вам предложат все доступные опции. Например, введите просто:

> Math.

И дважды нажмитеTAB. Вас приветствуют возможные автозаполнения:

> Math.
Math.__defineGetter__      Math.__defineSetter__      Math.__lookupGetter__
Math.__lookupSetter__      Math.__proto__             Math.constructor
Math.hasOwnProperty        Math.isPrototypeOf         Math.propertyIsEnumerable
Math.toLocaleString        Math.toString              Math.valueOf

Math.E                     Math.LN10                  Math.LN2
Math.LOG10E                Math.LOG2E                 Math.PI
Math.SQRT1_2               Math.SQRT2                 Math.abs
Math.acos                  Math.acosh                 Math.asin
Math.asinh                 Math.atan                  Math.atan2
Math.atanh                 Math.cbrt                  Math.ceil
Math.clz32                 Math.cos                   Math.cosh
Math.exp                   Math.expm1                 Math.floor
Math.fround                Math.hypot                 Math.imul
Math.log                   Math.log10                 Math.log1p
Math.log2                  Math.max                   Math.min
Math.pow                   Math.random                Math.round
Math.sign                  Math.sin                   Math.sinh
Math.sqrt                  Math.tan                   Math.tanh
Math.trunc

В зависимости от размера экрана вашей оболочки вывод может отображаться с различным количеством строк и столбцов. Это список всех функций и свойств, доступных в модулеMath.

НажмитеCTRL+C, чтобы перейти к новой строке в приглашении, не выполняя то, что находится в текущей строке.

Знание ярлыков REPL делает вас более эффективным при его использовании. Однако есть еще одна вещь, которую REPL обеспечивает для повышения производительности -The REPL commands.

[[step-4 -—- using-repl-commands]] == Шаг 4. Использование команд REPL

REPL имеет конкретные ключевые слова, чтобы помочь контролировать его поведение. Каждая команда начинается с точки..

.Помогите

Чтобы вывести список всех доступных команд, используйте команду.help:

> .help

Их не так много, но они полезны для достижения цели в REPL:

.break    Sometimes you get stuck, this gets you out
.clear    Alias for .break
.editor   Enter editor mode
.exit     Exit the repl
.help     Print this help message
.load     Load JS from a file into the REPL session
.save     Save all evaluated commands in this REPL session to a file

Press ^C to abort current expression, ^D to exit the repl

Если вы когда-нибудь забудете команду, вы всегда можете обратиться к.help, чтобы узнать, что она делает.

.break/.clear

Используя.break или.clear, легко выйти из многострочного выражения. Например, начнитеfor loop следующим образом:

> for (let i = 0; i < 100000000; i++) {

Чтобы выйти из ввода каких-либо дополнительных строк, вместо перехода к следующей, используйте команду.break или.clear для выхода:

... .break

Вы увидите новое приглашение:

>

REPL перейдет на новую строку без выполнения какого-либо кода, аналогично нажатиюCTRL+C.

.save и .load

Команда.save сохраняет весь код, который вы запустили с момента запуска REPL, в файл. Команда.load запускает весь код JavaScript из файла внутри REPL.

Выйдите из сеанса, используя команду.exit или ярлыкCTRL+D. Теперь запустите новый REPL сnode. Теперь будет сохранен только тот код, который вы собираетесь написать.

Создайте массив с фруктами:

> fruits = ['banana', 'apple', 'mango']

В следующей строке REPL будет отображаться:

[ 'banana', 'apple', 'mango' ]

Сохраните эту переменную в новом файлеfruits.js:

> .save fruits.js

Нас приветствуют с подтверждением:

Session saved to: fruits.js

Файл сохраняется в том же каталоге, где вы открыли REPL Node.js. Например, если вы открыли REPL Node.js в своем домашнем каталоге, то ваш файл будет сохранен в вашем домашнем каталоге.

Выйдите из сеанса и запустите новый REPL сnode. В командной строке загрузите файлfruits.js, введя:

> .load fruits.js

Это приводит к:

fruits = ['banana', 'apple', 'mango']

[ 'banana', 'apple', 'mango' ]

Команда.load считывает каждую строку кода и выполняет ее, как и ожидалось от интерпретатора JavaScript. Теперь вы можете использовать переменнуюfruits, как если бы она была доступна в текущем сеансе все время.

Введите следующую команду и нажмитеENTER:

> fruits[1]

REPL выведет:

'apple'

Вы можете загрузить любой файл JavaScript с помощью команды.load, а не только элементы, которые вы сохранили. Давайте быстро продемонстрируем, открыв предпочитаемый вами редактор кода илиnano, редактор командной строки, и создадим новый файл с именемpeanuts.js:

nano peanuts.js

Теперь, когда файл открыт, введите следующее:

console.log('I love peanuts!');

Сохраните и выйдите из nano, нажавCTRL+X.

В том же каталоге, в котором вы сохранилиpeanuts.js, запустите Node.js REPL сnode. Загрузитеpeanuts.js в свой сеанс:

> .load peanuts.js

Команда.load выполнит единственный операторconsole и отобразит следующий вывод:

console.log('I love peanuts!');

I love peanuts!
undefined
>

Когда ваше использование REPL длится дольше, чем ожидалось, или вы считаете, что у вас есть интересный фрагмент кода, которым стоит поделиться или изучить более подробно, вы можете использовать команды.save и.load, чтобы обе эти цели стали возможными.

Заключение

REPL - это интерактивная среда, которая позволяет выполнять код JavaScript без предварительной записи его в файл.

Вы можете использовать REPL, чтобы опробовать код JavaScript из других уроков:

Related