Un motivo è che concettualmente, firstName
, middleName
e lastName
sono logicamente un argomento , non tre. Sono tutte parti di un tutto più grande, e si può immaginare che siano quasi sempre passati insieme. Nei linguaggi funzionali sarebbero probabilmente passati come una tupla o un record; A Java mancano quelli, quindi probabilmente sarebbero aggregati in una classe Name. Tieni presente che se hai bisogno di comporre le funzioni che accettano e restituiscono nomi completi, non saresti in grado di farlo senza aggregarli, dopotutto puoi solo restituire un valore.
Forse non emerge molto spesso che un valore è opzionale e non fa parte di un insieme più grande. Se la funzione richiede un certo valore per fare il suo lavoro, allora quella funzione non dovrebbe accettare un Optional
. Se hai bisogno di concatenare operazioni che potrebbero non restituire un valore, interrompendo con Nothing
se una funzione non riesce, puoi concatenare le chiamate a flatMap
, e se vuoi fallire con un'eccezione puoi usare get()
in qualsiasi fase del percorso o alla fine della catena.
Se un valore è veramente facoltativo e una funzione fa due cose diverse in base alla sua presenza o assenza, questo è un odore di codice a meno che la funzione non sia un wrapper di due funzioni più piccole che fanno una cosa ciascuna, e quella particolare combinazione di decisioni è molto comune.
Non penso che sia così tanto sbagliato che sia un caso d'uso relativamente raro.