/hw_js_async

Lecture #4 "Errors, closure, async"

Primary LanguageJavaScript

Домашнее задание к занятию «Обработка ошибок, замыкания и асинхронность»

Цель задания

В результате выполнения этого задания вы сможете:

  1. Освоить базовые навыки использования замыканий в JavaScript.
  2. Освоить базовые навыки асинхронного программирования с использованием коллбэков и промисов.

Чеклист готовности к домашнему заданию

  1. Для выполнения задания требуется компьютер с операционной системой Windows, MacOS или Linux.
  2. На компьютере студента должно быть предварительно установлено IDE VS Code.
  3. Для установки платформы NodeJS могут потребоваться соответствующие права доступа в системе.

Инструкция к заданию

  1. Прочитайте документацию по модулю организации консольного ввода readline в NodeJS: https://nodejs.org/api/readline.html. Функции, которые могут вам пригодиться при выполнении данного домашнего задания: rl.question, rl.line, rl.prompt, rl.close. При просмотре примеров устанавливайте переключатель в правом верхнем углу примеров в положение "CJS" (синтаксис подключения модулей CommonJS, используемый по умолчанию в NodeJS).
  2. Выполните задания 1-3 ниже.

Инструменты/ дополнительные материалы, которые пригодятся для выполнения задания

  1. Среда разработки VSCode.
  2. Платформа NodeJS.

Задание 1

В отдельном файле с расширением .js напишите программу, состоящую из функции, возвращающей в качестве результата фунцию, проверяющую пароль пользователя:

    function getPasswordChecker(password)

Функция должна принимать один параметр - правильное значение пароля.

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

Возвращаемая функция проверки пароля должно принимать один параметр - пароль, введенный пользователем для проверки. В качестве результата функция должна возвращать логическое значение true или false в зависимости от результата проверки.

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

Задание 2

В отдельном файле с расширением .js напишите программу, реализующую игру "угадай число" с подсказками "больше" и "меньше".

Программа должна реализовывать вариант игры, состоящей из множества попыток до точного угадывания числа пользователем.

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

Для ввода чисел от пользователя используйте функции библиотеки reaLine, использующие коллбэки (не использующие promise).

(*)(не обязательное задание) Реализуйте запись протокола игры с сохранением вводимых значений и ответов программы во внешний файл. Для этого познакомьтесь с функциями библиотеки fs, такими как fs.writeFile, fs.promises.writeFile, fs.writeFileSync и их вариантами дополняющими файл вместо перезаписи fs.appendFile: https://nodejs.org/api/fs.html

Задание 3

В отдельном файле с расширением .js напишите программу, реализующую функционал из задания 2, но использующую promise вместо коллбэков либо в форме вызовов .then, либо async/await.

(*)(не обязательное задание) Реализуйте собственную промисную обертку для функции rl.question, не используя готовую функцию из promise API библиотеки readline. Используйте эту обертку для реализации игры

Правила приема работы

  1. Задание необходимо сдавать в виде ссылки на репозиторий в github, содержащий файлы с кодом для каждого из заданий.
  2. В случае создания отдельной ветки (branch) для заданий к каждому уроку ссылка, прикрепленная в личном кабинете, должна быть на ветку, содержащую решение данного задания.

Критерии оценки

  1. К заданию прикреплена ссылка на ветку в репозитории, содержащую файлы с кодом для заданий 1-3.
  2. Код в файлах соответствует заданию и при выполнении не вызывает ошибок времени компиляции или выполнения. В случае необходимости запуска кода с определенными параметрами командной строки, это должно быть описано в виде комментариев в коде.