|
| 1 | +# Домашнее задание к лекции «Контейнеры» |
| 2 | + |
| 3 | +**Важно**: каждая задача выполняется в виде отдельного проекта с собственным GitHub репозиторием. |
| 4 | + |
| 5 | +**Важно**: код должен проходить ESLint без ошибок. |
| 6 | + |
| 7 | +**Важно**: тесты должны обеспечивать 100% покрытие тестируемых функций по строкам. |
| 8 | + |
| 9 | +**Важно**: решения должны быть построены на базе [шаблона Webpack](/ci-template). |
| 10 | + |
| 11 | +В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте ссылки на ваш GitHub-проекты. |
| 12 | + |
| 13 | +--- |
| 14 | + |
| 15 | +## `Set` |
| 16 | + |
| 17 | +### Легенда |
| 18 | + |
| 19 | +Игрок может выбирать персонажей в команду на конкретный раунд исходя из их текущего состояния, уровня и стратегии игры. Нам необходимо не позволять ему добавлять в команду несколько раз одного и того же персонажа. |
| 20 | + |
| 21 | +### Описание |
| 22 | + |
| 23 | +Создайте класс `Team` с методами `add`, `addAll` и `toArray`. Класс должен хранить данные о персонажах команды в поле типа `Set`: |
| 24 | +```javascript |
| 25 | +class Team { |
| 26 | + constructor() { |
| 27 | + this.members = new Set(); |
| 28 | + } |
| 29 | + ... |
| 30 | +} |
| 31 | +``` |
| 32 | + |
| 33 | +Метод `add` должен добавлять выбранного персонажа в команду (объект класса `Character`). При этом такой объект уже существует в команде - дублирования происходить не должно, должна генерироваться ошибка. |
| 34 | + |
| 35 | +Метод `addAll` должен иметь возможность добавлять произвольное количество персонажей (используйте rest-parameters) в команду. При этом задвоения быть не должно, ошибка генерироваться **не должна**. |
| 36 | + |
| 37 | +Метод `toArray` должен производить конвертацию `Set` в массив. |
| 38 | + |
| 39 | +Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функций и классов, которые вы тестируете. |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## Map |
| 44 | + |
| 45 | +### Легенда |
| 46 | + |
| 47 | +Вы решили упорядочить работу с ошибками в своём приложении, а именно ввести цетрализованно числовой код ошибки и её описание. И при генерации любых ошибок в коде приложения брать их из централизованного хранилища. |
| 48 | + |
| 49 | +### Описание |
| 50 | + |
| 51 | +Создайте свой класс `ErrorRepository` внутри которого храните `Map`, в котором ключ - это код ошибки (число), а значение - текстовое описание (человекочитаемое). |
| 52 | + |
| 53 | +Реализуйте метод `translate(code)`, позволяющий по коду получить текст ошибки, а в случае отсутствия подобного кода возвращать строку `'Unknown error'`. |
| 54 | + |
| 55 | +Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функций и классов, которые вы тестируете. |
| 56 | + |
| 57 | +---- |
| 58 | + |
| 59 | +## Map (задача со звёздочкой) |
| 60 | + |
| 61 | +**Важно**: данная задача не является обязательной |
| 62 | + |
| 63 | +### Легенда |
| 64 | + |
| 65 | +Давать возможность пользователю кастомизировать внешний вид приложения - достаточно хорошая идея. Поэтому вы решили также реализовать поддержку этой функциональности в своей игре. |
| 66 | + |
| 67 | +### Описание |
| 68 | + |
| 69 | +У вас есть default'ные настройки, хранящиеся в `Map`'е: |
| 70 | +1. `'theme': 'dark'` (другие возможные значения - `'light'`, `'gray'`); |
| 71 | +1. `'music': 'trance'` (другие возможные значения - `'pop'`, `'rock'`, `'chillout'`, `'off'`); |
| 72 | +1. `'difficulty': 'easy'` (другие возможные значения - `'normal'`, `'hard'`, `'nightmare'`). |
| 73 | + |
| 74 | +Напишите класс `Settings`, который содержит: |
| 75 | +1. Набор настроек по умолчанию - хранить в `Map`'е; |
| 76 | +1. Набор пользовательских настроек (пользователь может установить конкретную настройку по имени и значению) - хранить в `Map`'е нужно только те настройки, которые пользователь установил; |
| 77 | +1. Get'тер `settings`, который возвращает `Map`, полученный путём наложения пользовательских настроек, на default'ные. |
| 78 | + |
| 79 | +Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функций и классов, которые вы тестируете. |
0 commit comments