В результате выполнения этого задания вы сможете:
- Освоить базовые навыки использования замыканий в JavaScript.
- Освоить базовые навыки асинхронного программирования с использованием коллбэков и промисов.
- Для выполнения задания требуется компьютер с операционной системой Windows, MacOS или Linux.
- На компьютере студента должно быть предварительно установлено IDE VS Code.
- Для установки платформы NodeJS могут потребоваться соответствующие права доступа в системе.
- Прочитайте документацию по модулю организации консольного ввода readline в NodeJS: https://nodejs.org/api/readline.html. Функции, которые могут вам пригодиться при выполнении данного домашнего задания: rl.question, rl.line, rl.prompt, rl.close. При просмотре примеров устанавливайте переключатель в правом верхнем углу примеров в положение "CJS" (синтаксис подключения модулей CommonJS, используемый по умолчанию в NodeJS).
- Выполните задания 1-3 ниже.
В отдельном файле с расширением .js напишите программу, состоящую из функции, возвращающей в качестве результата фунцию, проверяющую пароль пользователя:
function getPasswordChecker(password)
Функция должна принимать один параметр - правильное значение пароля.
Функция должна быть реализована с помощью замыкания таким образом, чтобы после получения проверяющей функции невозможно было каким-либо образом узнать правильный пароль.
Возвращаемая функция проверки пароля должно принимать один параметр - пароль, введенный пользователем для проверки. В качестве результата функция должна возвращать логическое значение true или false в зависимости от результата проверки.
В основном коде программы напишите тестовые вызовы для getPasswordChecker и для проверочной функции, чтобы убедиться в корректности их работы.
В отдельном файле с расширением .js напишите программу, реализующую игру "угадай число" с подсказками "больше" и "меньше".
Программа должна реализовывать вариант игры, состоящей из множества попыток до точного угадывания числа пользователем.
Программа должна вести счетчик количества попыток и информировать пользователя о номере текущей попытки и общем количестве попыток при завершении игры.
Для ввода чисел от пользователя используйте функции библиотеки reaLine, использующие коллбэки (не использующие promise).
(*)(не обязательное задание) Реализуйте запись протокола игры с сохранением вводимых значений и ответов программы во внешний файл. Для этого познакомьтесь с функциями библиотеки fs, такими как fs.writeFile, fs.promises.writeFile, fs.writeFileSync и их вариантами дополняющими файл вместо перезаписи fs.appendFile: https://nodejs.org/api/fs.html
В отдельном файле с расширением .js напишите программу, реализующую функционал из задания 2, но использующую promise вместо коллбэков либо в форме вызовов .then, либо async/await.
(*)(не обязательное задание) Реализуйте собственную промисную обертку для функции rl.question, не используя готовую функцию из promise API библиотеки readline. Используйте эту обертку для реализации игры
- Задание необходимо сдавать в виде ссылки на репозиторий в github, содержащий файлы с кодом для каждого из заданий.
- В случае создания отдельной ветки (branch) для заданий к каждому уроку ссылка, прикрепленная в личном кабинете, должна быть на ветку, содержащую решение данного задания.
- К заданию прикреплена ссылка на ветку в репозитории, содержащую файлы с кодом для заданий 1-3.
- Код в файлах соответствует заданию и при выполнении не вызывает ошибок времени компиляции или выполнения. В случае необходимости запуска кода с определенными параметрами командной строки, это должно быть описано в виде комментариев в коде.