Skip to content

Latest commit

 

History

History
 
 

syntactic-constructions

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Домашнее задание к лекции «Синтаксические конструкции»

Важно: каждая задача выполняется в виде отдельного проекта с собственным GitHub репозиторием.

Важно: код должен проходить ESLint без ошибок (warning'и допускаются)

Важно: тесты должны обеспечивать 100% покрытие функций по строкам

Важно: решения должны быть построены на базе шаблона Webpack.

В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте ссылки на ваш GitHub-проекты.


try ... catch

Легенда

Ошибки случаются, такова жизнь. Но нужно уметь с ними работать. Ваши коллеги разработали форму, которая принимает от пользователя количество покупаемых единиц товара, вас же попросили написать функцию-преобразователь, которая возвращает число - если всё ок, и генерирует ошибку - если ввод не является числом в десятичной системе счисления.

Описание

Используйте возможности стандартной библиотеки JS для преобразования строки в число. Не забудьте написать unit-тесты, которые обеспечивают покрытие всех веток (валидного и невалидного) ввода.


Closures

Легенда

В рамках игры есть необходимость реализовать удобный глобальный поиск по всей системе. Для этого решено сделать специальный виджет, который прозводит этот самый поиск с использованием следующего синтаксиса: <фраза> by:<prop> (пока не рассматривайте сценарий, что поля <prop> может не быть в объекте).

Описание

Массив объектов, по которым вам нужно производить поиск будет выглядеть следующим образом:

[
  {name: 'маг', type: 'character', description: 'Персонаж, обладающий магическими способностями'},
  {name: 'заклинание', type: 'attack', description: 'Атака магическим заклинанием'},
  {name: 'урон', type: 'help', description: 'Страница описания элемента интерфейса'},
]

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

Пример использования:

const finder = findBy('name', 'урон');
const results = [
  {name: 'маг', type: 'character', description: 'Персонаж, обладающий магическими способностями'},
  {name: 'заклинание', type: 'attack', description: 'Атака магическим заклинанием'},
  {name: 'урон', type: 'help', description: 'Страница описания элемента интерфейса'},
].filter(finder);

console.log(results);
/*
[{
  name: 'урон',
  type: 'help',
  description: 'Страница описания элемента интерфейса'
}]
*/

Не забудьте написать unit-тесты на своё решение.


Closures (задача со звёздочкой)

Важно: данная задача не является обязательной

Легенда

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

Важно: если жизнь персонажа дошла до 0, на него больше не распространяется это правило (делится на количество живых). Если баллы атаки не делятся нацело на количество живых персонажей, то остаток достаётся тому, которого атакуют.

Описание

Массив ваших персонажей выглядит следующим образом:

const characters = [
  {name: 'маг', health: 100},
  {name: 'лучник', health: 80},
  {name: 'мечник', health: 10},
]

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

Как это должно выглядеть:

/**
 * @param items - массив, с объектами ваших персонажей
 * @param shield - включена общая защита или нет 
 */
function setUpAttacks(items, shield = true) {
  const result = [];
    
  // TODO: ваш код
    
  return result; 
}

const characters = [
    {name: 'маг', health: 100},
    {name: 'лучник', health: 80},
    {name: 'мечник', health: 10},
]

const attacks = setUpAttacks(characters);

attacks[1](9); // атакуем лучника 9 баллами урона

console.log(characters)
/*
[
  {name: 'маг', health: 97},
  {name: 'лучник', health: 77},
  {name: 'мечник', health: 7},
]
*/