مرد دار

مرد دار

دشوار

دستورالعمل‌ها

منطق بازی Hangman را با برنامه‌نویسی واکنشی تابعی پیاده‌سازی کنید.

Hangman یک بازی ساده‌ی حدس کلمه است.

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

منطق پایه‌ی بازی Hangman را با برنامه‌نویسی واکنشی تابعی پیاده‌سازی کنید. برای این کار باید یک کتابخانه‌ی واکنشی تابعی نصب کنید؛ این موضوع در فایل‌های مخصوص زبان و مسیرِ این تمرین توضیح داده شده است.

راهنماییها

یکی از جنبههای اصلی برنامهنویسی تابعی این است که توابعی بدون عارضهی جانبی داشته باشیم و لازم نباشد نگران این باشیم که یک تابع کدام اشیای پنهان را تغییر داده است.

در برنامهنویسی واکنشی، بهجای اینکه یک مؤلفه فعالانه به دنبال کار باشد، کار به سمت مؤلفه رانده میشود. این شبیه کالبکهاست، اما در سطحی بسیار بالاتر و با انتزاعهای قدرتمندتر. بسیار پیش میآید که برنامهنویسی واکنشی در کنار برنامهنویسی تابعی به کار میرود.

در این تمرین از RxJava استفاده میکنیم؛ کتابخانهای شناختهشده برای برنامهنویسی واکنشی با یک API جاوا.

زمینهی شبیهسازیشدهی این تمرین، برنامهای است که دو ورودی دریافت میکند:

  • واژههای جدیدی که باید حدس زده شوند و از یک موتور بازی میآیند،
  • حروفی که بازیکن انتخاب میکند.

این دو ورودی با Observables پیادهسازی میشوند، با استفاده از کلاس io.reactivex.Observable. در واقع، میتوانید به یک Observable مشترک شوید تا به مقدارهایی که جایی تولید میشوند «واکنش» نشان دهید. برای مثال، موتور بازی وقتی تشخیص میدهد که بازی جدیدی شروع شده است، واژههای جدید را میفرستد، یا رویدادهای صفحهکلید ورودیهای حروف را تولید میکنند. اما بسیاری از frameworkهای واکنشی انتزاعهای قدرتمندی ارائه میدهند، مانند map که به شما امکان میدهد ورودی دریافتی را تغییر دهید، یا combine که به شما اجازه میدهد یک یا چند Observable را با هم ادغام کنید.

کلاس Output نتیجهی موردانتظار پردازش تمرین است و به یک front-end اجازه میدهد وضعیت کامل بازی را نمایش دهد، بدون اینکه به هیچ شکلی از ذخیرهسازی نیاز داشته باشد؛ و بدین ترتیب، خروجی هم تابعی میشود. در این تمرین باید راهی پیدا کنید که با هر دو ورودی، این خروجی را به شکل یک Observable تولید کنید.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Java Exercism

آماده‌اید مرد دار را شروع کنید؟

در Exercism ثبت‌نام کنید تا Java را همراه با 26 مفهوم158 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.