سرویس ترجمه‌ی کلینگون


داستان

در این تمرین شما یک TranslationService ارائه می‌دهید که اعضای دارای اشتراک به کمک آن از کیفیت مطلوب اطمینان حاصل می‌کنند.

شما یک API جادویی ترجمه پیدا کرده‌اید که می‌تواند هر درخواست ترجمه را در زمانی معقول برآورده کند و می‌خواهید از این فرصت بهره ببرید.

این API جادویی یک رابط بسیار ساده دارد:

دریافت یک ترجمه

api.fetch(text) ترجمه‌ی text را دریافت می‌کند و دو مقدار برمی‌گرداند:

  • translation: خود ترجمه
  • quality: کیفیت که به‌صورت یک عدد بیان می‌شود

اگر ترجمه‌ای در دسترس نباشد (چون هنوز درخواست نشده است)، API یک خطا پرتاب می‌کند. این اتفاق زمانی هم رخ می‌دهد که متنی قابل ترجمه نباشد.

درخواست یک ترجمه

api.request(text, callback) ترجمه‌ی text را درخواست می‌کند و وقتی آماده شد، callback را بدون هیچ مقداری فراخوانی می‌کند.

API مربوط به request ناپایدار است، یعنی گاهی API تابع callback را با یک خطا فراخوانی می‌کند. اگر چنین شد، اشکالی ندارد که دوباره درخواست کنید.

⚠ هشدار! ⚠

چون برخی کاربران قبلی هنگام برنامه‌نویسی تنبلی کرده‌اند و همیشه بدون اینکه بررسی کنند متن قبلاً ترجمه شده یا نه، درخواست ترجمه می‌فرستاده‌اند، API اگر متنی از قبل ترجمه شده باشد یک خطا برمی‌گرداند و دسترسی را برای همیشه به‌طور کامل می‌بندد.

وظایف

اینها نمونه‌هایی از وظایفی هستند که با داستان سرویس ترجمه جور در می‌آیند:

  • دریافت یک ترجمه، بدون توجه به کیفیت
  • دریافت دسته‌ای از ترجمه‌ها، همه یا هیچ
  • درخواست یک ترجمه با حداکثر ۲ بار تلاش دوباره
  • دریافت یک ترجمه، بررسی کیفیت، یا درخواست آن

اصطلاح‌شناسی

اینها توصیه‌اند، نه قانون، درباره‌ی اصطلاحات تکرارشونده در دستورالعمل‌ها (از جمله توضیحات نوشته‌شده در فایل اولیه)

  • به وابستگی تزریق‌شده، TranslationService یا API می‌گویند
  • سرویس async است، اما هیچ‌جا به این موضوع اشاره نمی‌شود
  • شکست در یک Future به این معناست که API یک خطا پرتاب می‌کند
  • شکست در یک Callback به این معناست که API تابع callback را با یک خطا فراخوانی می‌کند

همه‌ی متن‌هایی که ترجمه می‌شوند، از کلینگون به انگلیسی هستند.

پیاده‌سازی‌ها

مراجع

نکته

ترجمه‌ی درست 'arlogh Qoylu'pu'? این است: How many times has it been heard?.