Qualità del codice Java nei metodi di chiamata dei metodi

0

Attualmente sto lavorando con una base di codice "interessante" e vedo il seguente tipo di cosa nel codice.

public Object doSomething()
{
    Object obj = new Object();

    // Do some stuff to the object

    obj = doSomthingElse(obj);    

    return obj;
}

Quando guardo questo tipo di codice, sento sempre che non è corretto passare un oggetto in un metodo come parametro, ma anche impostare l'oggetto restituito dal metodo sulla stessa variabile che faceva riferimento all'oggetto passato. Di solito faccio qualcosa di simile al seguente, dove creo una nuova variabile per evitare qualsiasi confusione.

public Object doSomething()
{
    Object obj = new Object();

    // Do some stuff to the object

    Object anotherObj = doSomthingElse(obj);     

    return anotherObj;
}

Ho sbagliato a pensare che il secondo snippet di codice sia più leggibile / corretto?

    
posta T-Pane 03.04.2014 - 12:39
fonte

3 risposte

4

Se la chiamata al metodo sta trasformando l'oggetto senza crearne una copia (e quindi restituendo lo stesso oggetto, con le modifiche), l'istruzione obj = doSomthingElse(obj); non ha alcun effetto (potresti invece eseguire doSomthingElse(obj); ).

Se il metodo crea e restituisce un altro oggetto (che è una copia modificata dell'originale), ciò che l'istruzione obj = doSomthingElse(obj); fa è chiamato riutilizzo variabile . Dire che è una buona o una cattiva pratica sarebbe nient'altro che un'opinione.

Seguendo il tuo esempio astratto, la mia opinione sarebbe che è necessario aggiungere alcuni commenti al codice che spiegano che cosa rappresenta la variabile obj . Quindi, riutilizzandolo o meno, dovresti cercare di attenersi a ciò che è documentato (il ruolo della variabile nel codice).

Se il risultato di doSomthingElse(obj) è un altro oggetto e rappresenta qualcosa di diverso dal ruolo documentato della variabile obj , allora dovresti usare un'altra variabile (come hai fatto tu), IMHO.

    
risposta data 03.04.2014 - 13:33
fonte
1

Non c'è una risposta giusta o sbagliata a questo. È molto soggettivo. Direi che lo stile verso cui ti stai appoggiando è ampiamente considerato valido ma forse un po 'schizzinoso per alcuni.

Se non vuoi riutilizzare le variabili, ti consiglio vivamente di dichiararle final . Ciò renderà chiara la tua intenzione al compilatore e agli altri sviluppatori.

Eviterei di dichiarare una variabile semplicemente per restituirla ma probabilmente è proprio lì per illustrare il tuo scenario.

    
risposta data 07.08.2017 - 18:20
fonte
1

Il riutilizzo variabile non è orribilmente sbagliato, ma perdi la possibilità di scrivere codice più chiaro con dando le variabili ai nomi . Ad esempio, se stavi manipolando un Punto, usa

Point origin = new Point();
Point translated = doSomething(origin);
return translated;
    
risposta data 08.08.2017 - 02:43
fonte

Leggi altre domande sui tag