Служба перекладу клінгонської


Історія

У цій вправі ми створимо TranslationService, за допомогою якого платні учасники отримають певні гарантії якості.

Ми знайшли чарівний API перекладу, який здатен виконати будь-який запит на переклад за прийнятний час, і хочемо цим скористатися.

Чарівний API має дуже мінімальний інтерфейс:

Отримання перекладу

api.fetch(text) отримує переклад text і повертає два значення:

  • translation: власне переклад
  • quality: якість, виражена числом

Якщо переклад недоступний (бо його ще не запросили), API викидає помилку. Так само стається, якщо якийсь текст неможливо перекласти.

Запит перекладу

api.request(text, callback) запитує переклад text і викликає callback, щойно переклад готовий, не передаючи йому жодного значення.

API request нестабільний, тобто іноді він викликає callback з помилкою. Якщо це станеться, запит можна повторити.

⚠ Застереження! ⚠

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

Завдання

Ось приклади завдань, які пасують до історії служби перекладу:

  • Отримати переклад, ігноруючи якість
  • Отримати пакет перекладів, усе або нічого
  • Запросити переклад, повторивши щонайбільше 2 рази
  • Отримати переклад, перевірити якість або запросити його

Термінологія

Це рекомендації, а не правила, щодо повторюваної термінології в інструкціях (зокрема в коментарях до заготовки)

  • Впроваджену залежність називають TranslationService, або API
  • Сервіс асинхронний, але про це ніколи не згадують
  • Збій у Future - це API викидає помилку
  • Збій у Callback - це API викликає callback з помилкою

Усі тексти перекладаються з клінгонської на англійську.

Реалізації

Довідка

Зауваження

Правильний переклад 'arlogh Qoylu'pu'? - How many times has it been heard?