2015-01-15 25 views
9

sto ereditare il codice di qualcun altro ha scritto al lavoro e ha scoperto che ci sono un sacco di "nuovo" istanziare senza in realtà l'assegnazione ad una variabile:instantiating senza assegnare ad una variabile

new MyCoolClass().MyCoolMethod(); 

Sono solo chiedendo se qualcuno ha qualche esperienza con questo e se questo è anti-pattern o no.

+4

Non c'è niente di tecnicamente sbagliato, ma "MyCoolMethod' dovrebbe probabilmente essere un metodo statico, poiché l'unico scopo dell'istanza' MyCoolClass' è di essere in grado di chiamare il metodo su di esso. –

+0

@ 500-InternalServerError true. Potrebbe essere il caso che MyCoolMethod venga usato come metodo di istanza appropriato altrove, comunque. – usr

+0

Per me è più di un anti-pattern che 'MyCoolMethod' sembra causare effetti collaterali sullo stato globale. Non richiede input e non restituisce nulla. Deve leggere e scrivere lo stato globale. – usr

risposta

9

Bene, se lo chiami spesso così, il metodo dovrebbe probabilmente essere un metodo static, poiché sembra che l'istanza non sia usata o almeno rilevante. Se crei un'istanza, dovresti usarla.

Proverei a scrivere questo tipo di codice. Per prestazioni e comprensione.

+0

Come sai che l'istanza non viene utilizzata all'interno del costruttore o 'MyCoolMethod'? – Alex

+1

Non lo fai, ma perché preoccuparsi? Perché non 'MyCoolClass.MyCoolMethod()'? –

5

A seconda di cosa fa MyCoolMethod(). Se restituisce nulla, allora non ha senso assegnarlo a una variabile. Non so degli altri, ma lo uso abbastanza spesso. Che sia o meno una buona pratica è in discussione :)

Modifica: Sono d'accordo con @Patrick Hofman. La mia risposta è effettivamente fuori. Ho pensato OP stava chiedendo perché non abbiamo una variabile per memorizzare ciò che restituisce MyCoolMethod(). Per favore vedi @ risposta di Patrick :)

+4

Anche se restituisce una variabile, non importa. Se crei un'istanza, dovresti usarla. –

+0

@PatrickHofman Se i metodi stanno facendo [Method Chaining] (http://en.wikipedia.org/wiki/Method_chaining) e lavori solo con l'oggetto finale dalla catena, non c'è alcuna ragione per mantenere l'oggetto iniziale intorno . –

+0

@Scott: quindi il primo dovrebbe essere un 'statico', giusto? E con il concatenamento ha uno scopo e viene usato, ma perde lo scopo immediatamente. –

1

Se il costruttore o il metodo utilizza l'istanza creata non c'è nulla di sbagliato in questo. Ad esempio, il costruttore o il metodo può assegnare valori ai campi o chiamare altri metodi di istanza o passare l'istanza a un altro metodo che la utilizza. Se l'istanza non è mai realmente utilizzata, allora è bene rifattarla su un metodo statico come suggeriscono le altre risposte.

Informazioni sull'assegnazione, perché assegnare l'istanza a una variabile se non è necessario utilizzarla di nuovo dopo questa chiamata di un metodo? L'unica ragione per cui posso pensare è che potrebbe migliorare la leggibilità (o meno) se si assegna un nome utile alla variabile.

Problemi correlati