Consentitemi di offrire una prospettiva sul motivo per cui abbiamo aggiunto questa funzione al linguaggio, quando chiaramente non ne avevamo strettamente bisogno (tutti i ref dei metodi possono essere espressi come lambda.)
Nota che non esiste una risposta giusta . Chiunque dica "usa sempre un metodo ref invece di un lambda" o "usa sempre un lambda invece di un metodo ref" dovrebbe essere ignorato.
Questa domanda è molto simile nello spirito a "quando dovrei usare una classe con nome rispetto a una classe anonima"? E la risposta è la stessa: quando lo trovi più leggibile . Ci sono certamente casi che sono sicuramente uno o sicuramente l'altro ma c'è una miriade di grigi nel mezzo, e il giudizio deve essere usato.
La teoria dietro il metodo refs è semplice: i nomi contano . Se un metodo ha un nome, è spesso (ma non sempre!) Più chiaro e leggibile fare riferimento ad esso per nome, piuttosto che tramite un sacchetto di codice imperativo che alla fine si limita a girarsi intorno e lo invoca.
Gli argomenti sulle prestazioni o sul conteggio dei caratteri sono per lo più falsi errori e dovresti ignorarli. L'obiettivo è scrivere un codice che sia chiarissimo cosa fa. Molto spesso (ma non sempre!) Gli ref del metodo vincono con questa metrica, quindi li abbiamo inclusi come opzione, da utilizzare in quei casi.
Una considerazione chiave sul fatto che il metodo refs chiarisca o offusca l'intento è se è ovvio dal contesto qual è la forma della funzione rappresentata. In alcuni casi (ad esempio, è map(Person::getLastName)
abbastanza chiaro dal contesto che è richiesta una funzione che mappa una cosa su un'altra, e in casi come questo, i riferimenti al metodo brillano. In altri, l'uso di un metodo ref richiede al lettore di chiedersi che tipo della funzione viene descritta; questo è un segnale di avvertimento che un lambda potrebbe essere più leggibile, anche se è più lungo.
Infine, quello che abbiamo scoperto è che la maggior parte delle persone all'inizio si allontana dai ref dei metodi perché si sentono ancora più nuovi e più strani dei lambda, e quindi inizialmente li trovano "meno leggibili", ma col tempo, quando si abituano alla sintassi, generalmente cambiano il loro comportamento e gravitano verso riferimenti al metodo quando possono. Quindi sii consapevole che la tua reazione soggettiva iniziale "meno leggibile" quasi certamente implica qualche aspetto di pregiudizio familiare, e dovresti darti la possibilità di metterti a tuo agio con entrambi prima di esprimere un'opinione stilistica.