2016-04-11 10 views
5

Così, sto scrivendo un po 'di codice per un incarico nella mia classe di strutture di dati, e mi chiedevo se si utilizza un metodo restituisce un valore in un altro metodo è generalmente cattiva praticaÈ una cattiva pratica che un metodo restituisca una stringa all'interno di un altro metodo?

public void PrintLocation(MarsLander ml) 
{ 
    for (int i = 10; i >= 0 ; i--) 
    { 
     Console.Write("{0} m: {1}", i * 100, WheresTheSpaceship(ml, i)); 
    } 

    Console.WriteLine(); 
} 

public string WheresTheSpaceship(MarsLander ml, int i) 
{ 
    if (i == ((ml.GetHeight() % 100) + 9)) 
    { 
     return " * \n"; 
    } 
    else 
    { 
     return "\n"; 
    } 
} 

Il metodo WheresTheSpaceship deve restituire se per stampare la posizione della navicella spaziale (il *) basta indentare fino alla riga successiva e tornare al metodo PrintLocation per reiterare il ciclo. (Questa è la mia prima domanda per favore andate piano con me :))

+3

questo è fatto tutto il tempo, ma non è un buon nome di metodo. –

+1

Va bene perché mettere tutto in un unico metodo è la cattiva pratica. Questo rende il tuo codice più liberamente accoppiato. –

+0

Sarebbe più pulito avere una chiamata 'GetRoundedLocation' che viene chiamata una sola volta per il lander e tenere separato tutto il codice di stampa dal codice di calcolo. Come scritto, se la posizione del lander fosse aggiornata su un thread separato non funzionerebbe. –

risposta

0

Non è male, se è necessario. È praticato anche da altri. Forse basta cambiare il nome del metodo per il codice, ad esempio GetSpaceshipLocation(MarsLander ml, int i)

1

In generale è buona norma mantenere i metodi brevi e avere uno scopo specifico, altrimenti potrebbero essere utilizzati in modo improprio. (Il metodo determina se la posizione deve essere stampata e formatta l'output).
Il metodo deve restituire ciò che era destinato: Se si vuole chiedere se la posizione deve essere stampato, un metodo più appropriato sarebbe:

public bool ShouldPrintLocation(MarsLander ml, int i) 
{ 
    return (i == ((ml.GetHeight() % 100) + 9); 
} 

PrintLocation() sarebbe poi effettivamente stampare la posizione se ciò è necessario:

public void PrintLocation(MarsLander ml) 
{ 
    for (int i = 10; i >= 0 ; i--) 
    { 
     string locationText = ShouldPrintLocation(ml, i) ? "*" : string.Empty; 
     Console.WriteLine("{0} m: {1}", i * 100, locationText); 
    } 

    Console.WriteLine(); 
} 

per me ha più senso di avere la formattazione dell'output in PrintLocation in quanto questo metodo è destinato a .. Stampa la posizione, al contrario di fare un po 'di logica/calcolo

Problemi correlati