⚡ JavaScript

Ввод и вывод данных в JavaScript (Node.js): подробное руководство

Введение: Зачем нужен ввод и вывод данных?

Представь, что ты — кассир в кафе. Чтобы принять заказ, тебе нужно:

  • Ввести данные от клиента (его имя, что он хочет заказать).
  • Вывести результат (сказать итоговую сумму или выдать чек).

Точно так же работают компьютерные программы. Они получают информацию от пользователя (ввод), обрабатывают её, а затем показывают результат (вывод).

В этом разделе мы научимся делать две главные вещи в JavaScript (Node.js):

  • Спрашивать что-то у пользователя и запоминать его ответ.
  • Показывать ответ или результат вычислений на экране.

Основной синтаксис: Как это работает?

1. Вывод данных (показываем результат)

Чтобы вывести текст или число на экран, используется команда console.log(). В скобках пишем то, что хотим показать.

// Пример 1: Просто текст
console.log("Привет, мир!"); 
// На экране появится: Привет, мир!

// Пример 2: Число
console.log(42); 
// На экране появится: 42

// Пример 3: Результат вычисления
console.log(5 + 3); 
// На экране появится: 8

2. Ввод данных (получаем ответ от пользователя)

В консоли (терминале) мы не можем просто так взять и спросить пользователя. Для этого нужна специальная подготовка. Мы будем использовать встроенный модуль readline.

Сначала мы создаем "интерфейс" для общения:

// Подключаем модуль readline
const readline = require('readline');

// Создаем интерфейс для ввода и вывода
const rl = readline.createInterface({
    input: process.stdin,  // Откуда читаем (клавиатура)
    output: process.stdout // Куда пишем (экран)
});

Теперь, чтобы задать вопрос и получить ответ, мы используем rl.question():

// Задаем вопрос
rl.question('Как тебя зовут? ', (answer) => {
    // Когда пользователь введет ответ, он попадет в переменную answer
    console.log('Привет, ' + answer + '!');
    
    // Важно! Закрываем интерфейс, чтобы программа завершилась
    rl.close();
});

Разбор типичных задач

Задача 1: "Площадь прямоугольника"

Условие: Нужно спросить у пользователя длину и ширину, а потом вывести площадь.

Решение:

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// Спрашиваем длину
rl.question('Введите длину: ', (length) => {
    // Спрашиваем ширину (внутри первого вопроса!)
    rl.question('Введите ширину: ', (width) => {
        // Вычисляем площадь (не забываем превратить текст в число с помощью Number)
        let area = Number(length) * Number(width);
        console.log('Площадь прямоугольника: ' + area);
        rl.close();
    });
});

Задача 2: "Определение возраста"

Условие: Есть год рождения и текущий год. Найти возраст.

Решение:

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('Введите год рождения: ', (birthYear) => {
    rl.question('Введите текущий год: ', (currentYear) => {
        let age = Number(currentYear) - Number(birthYear);
        console.log('Вам ' + age + ' лет.');
        rl.close();
    });
});

Частые ошибки новичков

  • Забыть закрыть интерфейс: Если не написать rl.close(), программа "зависнет" и не завершится.
  • Складывать строки вместо чисел: Если написать "5" + "3", получится "53", а не 8. Всегда превращайте ввод в число с помощью Number().
  • Путать порядок вопросов: Второй вопрос всегда пишется внутри первого, иначе программа спросит всё сразу, не дождавшись ответа.
  • Опечатки в названии переменной: Если вы спросили answer, а написали anser, программа выдаст ошибку.

Итоговый пример: "Уютное кафе"

Давай решим задачу, похожую на те, что будут в конце раздела. Напишем программу, которая принимает заказ в кафе.

Задача: Спросить имя клиента, название напитка и размер порции (маленький/большой). Вывести итоговое сообщение: "Заказ для [имя]: [размер] [напиток]".

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// Спрашиваем имя
rl.question('Как вас зовут? ', (name) => {
    // Спрашиваем напиток
    rl.question('Какой напиток желаете? (кофе, чай, какао) ', (drink) => {
        // Спрашиваем размер
        rl.question('Какой размер? (маленький/большой) ', (size) => {
            // Выводим итог
            console.log('Заказ для ' + name + ': ' + size + ' ' + drink);
            rl.close();
        });
    });
});

Попробуй запустить этот код в Node.js. Ты увидишь, как программа по очереди задает вопросы и в конце печатает готовый заказ. Это и есть основа любого взаимодействия с пользователем!