Sono l'autore del ciclope Prova l'implementazione, quindi potrei essere in grado di far luce sulle decisioni di progettazione che stanno dietro.
Per iniziare, le implementazioni hanno molte somiglianze, in quanto è possibile costruire direttamente i tipi di successo e di fallimento, oppure eseguire un fornitore e scegliere di gestire eventuali eccezioni che potrebbero essere lanciate da esso.
L'obiettivo di Cyclops Try non è quello di incoraggiare un approccio misto di gestione delle eccezioni imperativo e funzionale. Se si utilizza cyclops, provare a utilizzare tutte le funzioni di gestione delle eccezioni. Ma dovrebbe anche essere premeditato.
Per impostazione premeditata, intendo che in fase di progettazione dovresti limitare l'ambito di quali stati eccezionali ti aspetti che il tuo codice possa entrare e configurare Prova a intercettare le relative eccezioni solo .
Il motivo è semplice, qualsiasi tipo di eccezione che non hai pianificato è un bug e in quel caso dovremmo fallire velocemente. Vuoi catturare bug durante le prove unitarie o idealmente nei tuoi ambienti di test. Non in produzione, e non penso che tu voglia mascherarli permanentemente in produzione.
Puoi dire a ciclope Prova a catturare tutte le eccezioni (ad esempio passando a Throwable) e il comportamento sarebbe quindi lo stesso lambdista Try.
Un'altra differenza è che i metodi map e flatMap non gestiscono eccezioni successive per impostazione predefinita. È possibile configurare questo in modo che le successive eccezioni dei tipi specificati creando direttamente un oggetto di successo. Il ragionamento qui era anche quello di accertarsi che qualsiasi gestione delle eccezioni fosse intenzionale e non nascondesse errori (al contrario di incoraggiare gli sviluppatori a utilizzare un blocco Try / Catch altrove - preferiremmo non averlo fatto).