Implementa la logica del gioco dell'impiccato usando la programmazione funzionale reattiva.
L'impiccato è un semplice gioco in cui si indovinano le parole.
La programmazione funzionale reattiva è un modo per scrivere programmi interattivi. Si differenzia dalla prospettiva usuale: invece di dire «quando si preme il pulsante, incrementa il contatore», scrivi «il valore del contatore è la somma del numero di volte in cui si preme il pulsante».
Implementa la logica di base dell'impiccato usando la programmazione funzionale reattiva. Per farlo dovrai installare una libreria di programmazione funzionale reattiva: sarà descritto nei file specifici della lingua dell'esercizio.
Uno degli aspetti principali della programmazione funzionale è avere funzioni senza effetti collaterali, per non doversi chiedere quali oggetti nascosti una funzione ha modificato.
Con la programmazione reattiva, invece di avere un componente che cerca attivamente lavoro, è il lavoro a essere spinto verso il componente. È simile alle callback, ma a un livello molto più alto, con astrazioni più potenti. Molto spesso la programmazione reattiva viene usata insieme alla programmazione funzionale.
Nell'esercizio useremo RxJava, una libreria molto nota per la programmazione reattiva con un'API Java.
Il contesto simulato di questo esercizio è un'applicazione che riceve due input:
Questi due input sono implementati con gli Observables, usando la classe io.reactivex.Observable.
In sostanza, puoi sottoscriverti a un Observable per «reagire» ai valori che vengono prodotti da qualche parte. Per esempio, il motore di gioco spinge nuove parole quando rileva che è iniziata una nuova partita, oppure gli eventi della tastiera generano input di lettere.
Ma molti framework reattivi offrono astrazioni potenti, come map, che ti permette di cambiare l'input ricevuto, o combine, che ti consente di unire tra loro uno o più Observable.
La classe Output è il risultato atteso dell'elaborazione dell'esercizio: consente a un front-end di
mostrare lo stato completo della partita senza richiedergli alcuna forma di archiviazione, il che rende
funzionale anche il risultato.
In questo esercizio devi trovare un modo per usare entrambi gli input e generare questo output sotto forma di un Observable.
Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.