2015-05-24 16 views
5

Questa potrebbe essere una domanda stupida, ma mi sto insegnando da un libro e ho notato che molti esempi hanno l'istruzione di stampa in un metodo diverso da main. Mi stavo chiedendo se fa la differenza dove lo metti così ho incollato il programma su cui stavo lavorando quando mi è venuta la domanda. Sarebbe più efficiente per me avere il metodo getArea stampare l'area o lasciarla in main?È più efficiente avere un'istruzione di stampa in un metodo oltre a principale o importa?

private static Scanner in; 
private static double s; 
private static double a; 

public static void main(String[] args) { 
    in = new Scanner(System.in); 
    DecimalFormat two = new DecimalFormat("#.##"); 
    System.out.println("Enter the length from center to vertex: "); 
    double r = in.nextDouble(); 
    s = getSide(r); 
    a = getArea(s); 

    System.out.println("The area of a pentagon of radius "+r+" is "+two.format(a)); 

} 

public static double getSide(double radius){ 
    double side = 2 * radius * Math.sin((Math.PI)/5); 
    return side; 
} 

public static double getArea(double side){ 
    double area = (5 * Math.pow(side, 2))/(4 * Math.tan((Math.PI)/5)); 
    return area; 
} 

risposta

9

Non c'è differenza di efficienza. Questo può essere visto dal fatto che una funzione non può scoprire quale altra funzione lo chiama. Non può possibilmente comportarsi in un modo diverso. (Ad eccezione dell'introspezione e dell'integrazione dello stack ...)

Architettonicamente è meglio provare a mantenere i metodi puri, nel senso che non causano effetti collaterali se ciò non è richiesto. Ciò rende il programma più semplice da capire. Una funzione pura prende alcuni valori e restituisce un valore senza cambiare altro. La stampa è un effetto collaterale, quindi cerca di tenerlo fuori dalle funzioni in stile di calcolo.

+0

Grazie =) Questo è esattamente quello che mi stavo chiedendo. La mia inclinazione era quella di metterlo in linea principale, quindi i metodi dovevano solo eseguire una cosa, ma non mi sono mai imbattuto in nulla per verificare che sarebbe stato il modo migliore per farlo. –

1

L'operazione di stampa è una semplice funzionalità di registrazione e non presenta alcuna penalizzazione/beneficio prestazionale. Ogni volta che si scrive codice è possibile porre domande prossimi a te stesso:

  • caso questo codice essere utilizzato da qualcun altro? (non deve essere inserita alcuna registrazione)
  • Se questo codice deve essere debugato utilizzando i registri dell'applicazione (deve essere inserito il log in)
  • Di cosa verrà detto il messaggio che si desidera stampare? (Quello che deve essere fatto è inserito prima del metodo Il risultato dell'esecuzione deve essere inserito dopo il metodo Il processo di esecuzione deve essere inserito nel metodo stesso)