Sto discutendo un po 'con il mio amico se queste due pratiche sono semplicemente due facce della stessa medaglia o se si è veramente migliori.
Abbiamo una funzione che accetta un parametro, ne compila un membro e quindi lo restituisce:
Item predictPrice(Item item)
Credo che, poiché funziona sullo stesso oggetto che viene passato, non ha senso restituire l'articolo. In effetti, semmai, dal punto di vista del chiamante, confonde le cose in quanto ci si potrebbe aspettare che restituisca un nuovo elemento che non lo fa.
Afferma che non fa alcuna differenza, e non avrebbe nemmeno importanza se creasse un nuovo oggetto e lo restituisse. Sono fortemente in disaccordo, per i seguenti motivi:
Se sono presenti più riferimenti all'elemento (o puntatori o altro), l'allocazione di un nuovo oggetto e la sua restituzione sono di importanza materiale poiché tali riferimenti non saranno corretti.
Nei linguaggi gestiti senza memoria, la funzione che alloca una nuova istanza rivendica la proprietà della memoria, e quindi dovremmo implementare un metodo di pulizia che viene chiamato ad un certo punto.
L'allocazione sull'heap è potenzialmente costosa ed è quindi importante sapere se la funzione chiamata lo fa.
Quindi, credo che sia molto importante poter vedere tramite una firma dei metodi se modifica un oggetto o ne assegna uno nuovo. Di conseguenza, credo che poiché la funzione modifica semplicemente l'oggetto passato, la firma dovrebbe essere:
void predictPrice(Item item)
In ogni base di codice (certamente basi di codice C e C ++, non Java che è il linguaggio in cui stiamo lavorando) con cui ho lavorato, lo stile sopra è stato sostanzialmente rispettato e rispettato da programmatori considerevolmente più esperti. Afferma che, poiché la mia dimensione di esempio di basi di codice e colleghi è piccola rispetto a tutte le possibili basi di codice e colleghi, e quindi la mia esperienza non è un vero indicatore del fatto che uno sia superiore.
Quindi, qualche pensiero?
Item
è class Item ...
e non typedef ...& Item
, il locale item
è già una copia