2012-01-30 10 views
5

Dall'osservazione del codice sorgente per varie applicazioni Android (non scritte da me), ho notato uno schema di inserimento di determinati pezzi di codice nei propri metodi, sebbene non ci sia davvero alcun riutilizzo del codice, perché questi metodi vengono richiamati solo una volta l'intera applicazione.pezzo di codice che viene chiamato solo una volta: merita il proprio metodo?

Fino ad ora avevo una regola empirica che stabilisce che se una parte di codice viene utilizzata due o più volte nel codice dell'applicazione, allora merita il proprio metodo, semplicemente per l'eliminazione della ridondanza del codice.

Ma vedendo quei pezzi di codice chiaramente suddivisi in metodi propri (e il proprio metodo che chiama in alto), sto iniziando che forse mi manca qualcosa.

Altro che a scopo di documentazione, quali altri motivi possono giustificare l'inserimento di sole 4 righe di codice (chiamate solo una volta!) Nel proprio metodo?

+1

Leggibilità? Codice di auto-documentazione? "Metodo di chiamata overhead" può essere praticamente ignorato in Java in quanto non è un grosso problema. – Marcelo

risposta

5

ci sono alcune ragioni mi vengono in mente, anche se certamente non c'è una certa sovrapposizione:

  • Aiuta rendere il codice auto-documentazione.
  • Consente di eseguire test (unità) più semplici.
  • Aiuta a smettere di finire con metodi lunghi centinaia di righe.
  • Si potrebbe voler usare quel codice da qualche altra parte in futuro.

Ovviamente, tutto ciò si basa sul presupposto che quelle 4 righe di codice siano correlate e che eseguano una singola funzione. Trovo che una buona regola empirica sia: se non riesci a pensare ad un nome per questo, probabilmente non dovrebbe essere un metodo.

+4

+1 per la regola generale. Lo evidenzierò: "se non riesci a pensare ad un nome per questo, probabilmente non dovrebbe essere un metodo" – an00b

2

Vedere le giustificazioni fornite per il refactoring Compose Method.

4

documentazione e leggibilità sono ottimi motivi per inserire il codice in metodi, anche se tali metodi verranno eseguiti una sola volta. Alcune applicazioni potrebbero avere una serie di passaggi logici da completare all'avvio .... preferiresti avere tutto quel codice confuso in un metodo init o un metodo init che chiama metodi che sono stati correttamente denominati?

8

Tre motivi per iniziare con:

  • È possibile verificare in separazione da qualsiasi altra cosa. (Questo potrebbe finire contro il mantra di testare solo le API pubbliche, ma per me va bene. È fastidioso se devo testare un metodo a livello di pacchetto invece di privato per testarlo, ma preferirei farlo piuttosto che è necessario testare un enorme grumo di logica in una volta sola.)
  • È possibile creare un metodo più complicato da metodi semplici, in cui l'intero metodo complesso è a un livello di astrazione singola, senza specificare i dettagli. Leggere il metodo di alto livello significa solo leggere i nomi dei blocchi da cui è composto; puoi quindi immergerti nello a soli i dettagli che ti interessano, se necessario.
  • È possibile scrivere metodi che ogni facciamo una cosa ben, e il nome e documentarle in modo evidente

Naturalmente questo può essere esagerato, ma può sicuramente essere utile.

3

Si spera che faciliti codice più pulito, e dovrebbe essere più facile da testare.

Si menziona l'overhead per la chiamata di metodo, ma ciò non dovrebbe preoccupare se il metodo viene chiamato una sola volta.

+0

Mi dispiace, per "chiamato solo una volta" intendevo chiamato solo da un posto. Ad esempio, quel codice potrebbe essere chiamato più volte in un ciclo. – an00b

+0

L'overhead dovrebbe comunque essere trascurabile, in quanto il compilatore potrebbe eseguire alcune ottimizzazioni JIT su di esso in ogni caso. –

1

La leggibilità è la mia grande ragione per questo comportamento di codifica.

Se sto fissando un lungo elenco di codici, cercando una procedura specifica o una sezione di codice, potrebbe non essere immediatamente ovvio dove si trova quella specifica procedura o sezione di codice.

Perché scriviamo libri in paragrafi e capitoli? Perché le canzoni hanno strofe/versi, cori e ponti? Perché è più facile prendere in considerazione una grande idea in pezzi piccoli e altamente specifici.

Per quanto lo sviluppo del software si basa su un codice efficiente e pulito, il lavoro viene svolto nel modo più rapido ed elegante possibile. Deve anche essere leggibile dagli umani che lo manterranno.

Almeno, questa è la mia interpretazione.

0

Le VM Java in generale hanno un limite per le dimensioni massime del metodo che sarà idoneo per l'inlining. Estrarre il codice chiamato di rado può ingrassare le ruote per così dire. Puoi indicare esempi?

Problemi correlati