Quando dovrei creare un'istanza di una variabile anziché acquisirla attraverso un metodo?

3

Può essere noioso, ma mi piacerebbe sapere quale è un modo più efficiente di programmazione. Il risultato potrebbe essere leggermente migliore o leggermente peggiore, ma sono comunque interessato a ciò che è "migliore".

Dire che voglio creare un array di String oggetti in base alla quantità di colonne che ho ricevuto da una query SQL e poi andare avanti e riempire questo oggetto String[] con i valori attraverso l'uso di un ciclo for . cioè.

if(rs.next()) {
    String[] topLine = new String[metadata.getColumnCount()];

    for (int i = 0; i < metadata.getColumnCount(); i++) {
        topLine[i] = getColumnValue(rs, metadata.getColumnType(i + 1), i + 1);
    }
    writeNext(topLine);
}

Vedi l'uso di metadata.getColumnCount() per recuperare la quantità di colonne, solo due volte. Sarebbe più appropriato (e più veloce) portare questo valore nella propria variabile in modo tale che:

int columnCount = metadata.getColumnCount();

e usarlo solo due volte? O dovrei lasciare il metodo per chiamare due volte? Che n volte devo chiamare metadata.getColumnCount() prima che diventi più efficiente usare una variabile locale. C'è even qualche cambiamento?

Modifica: A proposito, questo non è il mio codice, l'ho preso come esempio.

    
posta insidesin 30.07.2015 - 15:31
fonte

2 risposte

2

When should I instantiate a variable rather than grabbing it through a method?

Quando il valore restituito nel metodo ha significato o sarà utilizzato oltre il nome del metodo, quindi ottenere il valore e assegnarlo alla variabile con il nome appropriato.

Se metadata.getColumnCount() è costante durante il ciclo, puoi recuperarlo e metterlo in una cache in locale prima del ciclo.

In entrambi i casi non sarei preoccupato delle prestazioni del get a meno che tu non sia stato in grado di misurare il degrado e farebbe la differenza per l'applicazione. Concentrati sulla chiarezza e l'intento del codice, ottimizza in base alle misurazioni delle prestazioni. I moderni compilatori e VM sono molto bravi in quello che fanno.

    
risposta data 30.07.2015 - 15:48
fonte
0

Dipende dall'intento del tuo codice ed evita di ripetere te stesso.

Se l'intento è di fare affidamento sul valore di ritorno di un metodo per essere lo stesso in entrambe le istanze, assegnare una singola variabile. In questo modo, un altro sviluppatore non deve determinare se entrambi gli usi del metodo restituiranno sempre lo stesso valore.

In questo esempio, ogni sviluppatore dovrebbe sapere che si intende applicare lo stesso valore due volte:

thisCount = metadata.getColumnCount()
DoSomething(thisCount)
DoSomethingElse(thisCount)

Ora, se c'è un nuovo parametro da applicare a quel metodo, devi solo cambiare in un punto:

thisCount = metadata.getColumnCount(skipPrimaryKey = true)
    
risposta data 30.07.2015 - 18:36
fonte

Leggi altre domande sui tag