Треки
/
JavaScript
JavaScript
/
Вправи
/
Датчики на фабриці
Датчики на фабриці

Датчики на фабриці

Навчальна вправа

Вступ

Помилки

Помилки корисно повідомляти, коли в програмі або фрагменті коду щось іде не так або стається несподіване.

Це обʼєкти JavaScript.

Головна властивість цього обʼєкта - message:

const error = new Error('Oops, something went wrong');

console.log(error.message);
// => "Oops, something went wrong"

За допомогою синтаксису throw можна викинути помилку.

throw new Error('Oops');

Коли помилку викинуто, поточне виконання зупиняється й відновлюється в першому блоці catch стека викликів.

try {
  throw new Error('Oops');
} catch (error) {
  console.log(error.message);
  // => "Oops"
}

Наслідування

Наслідування - це спосіб створювати звʼязки «батько-дитина» між класами. Дочірній клас (його іноді називають підкласом) має доступ до поведінки та даних, визначених батьківським класом (його іноді називають надкласом).

class Pet {
  constructor(name) {
    this.name = name;
  }

  introduce() {
    console.log(`This is my pet, ${this.name}.`);
  }
}

class Dog extends Pet {}

const dog = new Dog('Otis');
dog.introduce();
// => This is my pet, Otis.

Ключове слово extends в оголошенні дочірнього класу встановлює звʼязок із батьківським класом через ланцюжок прототипів.

Обʼєкти, створені конструктором дочірнього класу, матимуть прототип батьківського класу у своєму ланцюжку прототипів, що дає доступ до будь-яких методів чи даних, визначених батьком.

const dog = new Dog('Otis');

Dog.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(dog); // => true
Pet.prototype.isPrototypeOf(Dog.prototype); // => true

Pet.prototype.hasOwnProperty('introduce'); // => true
Dog.prototype.hasOwnProperty('introduce'); // => false
dog.hasOwnProperty('introduce'); // => false

Як і будь-який клас у JavaScript, підкласи можуть успадковуватися від Error, щоб створювати власні помилки за допомогою ключового слова extends. Синтаксис instanceof перевіряє, чи є спіймана помилка екземпляром конкретного підкласу Error.

class CustomError extends Error {}

try {
  // ... Code that may throw an error
} catch (error) {
  if (error instanceof CustomError) {
    console.log('The error thrown is an instance of the CustomError');
  }
}

Вказівки

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

1. Стежте за рівнем вологості в приміщенні

Перше завдання - написати програму для моніторингу рівня вологості у виробничому приміщенні. До програмного забезпечення компанії вже підʼєднано датчик, який періодично повертає відсоток вологості в приміщенні.

Потрібно реалізувати в програмі функцію, яка викидатиме помилку, якщо відсоток вологості занадто високий. Функція повинна називатися checkHumidityLevel і приймати відсоток вологості як параметр.

Якщо відсоток перевищує 70%, потрібно викинути помилку (повідомлення не має значення).

checkHumidityLevel(60);
// => undefined
checkHumidityLevel(100);
// Throws an error

2. Виявіть перегрів

Елена дуже задоволена нашим першим завданням і просить нас зайнятися моніторингом температури машин. Під час розмови з техніком Грегом ми дізнаємося, що якщо температура машини перевищує 500°C, техніки починають хвилюватися через перегрів.

Машина оснащена датчиком, який вимірює її внутрішню температуру. Треба знати, що датчик дуже чутливий і часто ламається. У цьому випадку технікам потрібно буде його замінити.

Наше завдання - реалізувати функцію reportOverheating, яка приймає температуру як параметр і викидає помилку, якщо датчик зламався або якщо машина починає перегріватися. Оскільки згодом нам потрібно буде реагувати на помилки по-різному, потрібен механізм, щоб розрізняти ці два види помилок. Можна було б покладатися на повідомлення про помилки, але це зробило б наш код крихким: він зламається, якщо повідомлення зміниться. Тож щоб зробити все правильно, ми будемо викидати екземпляри різних класів помилок.

  • Якщо датчик зламано, температура дорівнюватиме null. У цьому випадку потрібно викинути ArgumentError.
  • Коли все працює, якщо температура перевищує 500°C, потрібно викинути OverheatingError. Цей клас помилки буде створено з аргументом температури. Переконайтеся, що OverheatingError, яку ми викидаємо, має властивість температури.
reportOverheating(null);
// Throws an ArgumentError
reportOverheating(800);
// Throws an OverheatingError

3. Стежте за машиною

Тепер, коли наша машина вміє виявляти помилки, ми реалізуємо функцію, яка реагує на ці помилки різними способами:

  • Якщо датчик зламано, потрібно попередити техніка
  • Якщо температура занадто висока, ми або вимкнемо машину, якщо температура перевищує 600°C, або увімкнемо попереджувальний індикатор, якщо вона менша.
  • Якщо трапиться інша помилка, ми викинемо її далі.

Реалізуйте функцію monitorTheMachine, яка приймає аргумент actions.

actions - це обʼєкт, який має 4 властивості:

властивість опис
check функція. Перевіряє температуру машини. Може викидати різні помилки.
alertDeadSensor функція. Попереджає техніка, що датчик температури не працює.
alertOverheating функція. Увімкне попереджувальний індикатор на машині.
shutdown функція. Вимкне машину.

Функція monitorTheMachine(actions) повинна всередині викликати check(). Якщо все гаразд, функція не повинна нічого повертати. Якщо ж throw викине помилку, очікується інша поведінка:

виняток очікувана поведінка
ArgumentError викликати функцію alertDeadSensor.
OverheatingError виконати протокол перегріву.
(будь-що інше) викинути помилку далі

Протокол перегріву Якщо температура менша за 600 °C, увімкніть попереджувальний індикатор, викликавши функцію alertOverheating. Якщо температура перевищує 600 °C, ситуація критична, тож викличте функцію shutdown.

monitorTheMachine({
  check,
  alertDeadSensor,
  alertOverheating,
  shutdown,
});
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
JavaScript Exercism

Час розпочати Датчики на фабриці?

Зареєструйтеся на Exercism, щоб вивчати й опановувати JavaScript, а також 37 концепцій159 вправ та справжнє наставництво від людей, і все це безкоштовно.