Esci da un programma principale o in funzione?

3

Diciamo che ho un metodo / funzione vuoto per controllare gli argomenti del programma:

void check(int argc, String argv){
    //some irrelevant code
}

In questa funzione ho alcuni controlli per convalidare la correttezza degli argomenti. Ad esempio se ce ne sono troppi o se non vengono riconosciuti.

Dovrei semplicemente uscire dal programma in questa funzione come nell'esempio 1, o dovrei dargli un valore di ritorno e chiuderlo in main() ?

Esempio 1

void check(int argc, String argv){
    if(argc > 4){
        print("Too many arguments!");
        exit(-1);
    }
    //code
}

Esempio 2

int check(int argc, String argv){
    if(argc > 4){
        print("Too many arguments!");
        return -1;
    }
    //code
}

int main(int argc, String argv){
    if(check(argc, argv) == -1){
        return -1;
    }
}
    
posta moffeltje 20.05.2015 - 14:14
fonte

4 risposte

10

Lascia la tua funzione main per uscire dal programma. L'unico scopo della tua funzione check dovrebbe essere quello di verificare i parametri e restituire uno stato valido / non valido. IMHO non dovrebbe nemmeno essere responsabile della stampa del messaggio dell'utente finale.

La meno responsabilità che dai a un metodo, più facile sarà leggere, riutilizzare, documentare e testare.

    
risposta data 20.05.2015 - 14:20
fonte
4

Sono esitante a terminare l'operazione in un metodo diverso dal metodo principale, semplicemente perché rende più difficile riutilizzare l'operazione senza modifiche, sia nell'applicazione che in un'altra applicazione. Preferirei restituire una condizione di errore dal metodo che può essere controllato dal chiamante o lanciare un'eccezione o qualunque meccanismo simile richieda la lingua o la guida di stile.

Un'eccezione potrebbe essere le funzioni di supporto per il tuo metodo principale. Ad esempio, se hai incapsulato la tua routine principale da sola in un singolo file e hai metodi che esistono solo per inizializzare e avviare la tua applicazione, allora considererei accettabile uscire da questi metodi se l'esecuzione non può procedere.

    
risposta data 20.05.2015 - 14:24
fonte
2

Fai 1 cosa alla volta nelle tue funzioni, in questo modo puoi documentarle e riutilizzarle.

Quindi, se la tua funzione di controllo controlla semplicemente un valore e restituisce un valore booleano, puoi riutilizzarlo ovunque tu abbia requisiti simili.

Se esce, allora è prezioso solo in questo 1 programma.

Come best practice, uscire dalle funzioni non è una buona cosa da fare, ci sono casi in cui lo farai (in genere su un errore irreversibile) ma a meno che non ci sia un assoluto, ovvio bisogno di farlo, continua ad uscire solo la fine di main ().

    
risposta data 20.05.2015 - 14:23
fonte
1

Secondo me solo la funzione main () dovrebbe essere responsabile per l'arresto del programma. Avere una funzione separata per verificare la validità degli argomenti rende questa parte più facile da testare. E pensa a cosa succede se il tuo programma si espande; se all'improvviso avessi una mezza dozzina di metodi che potrebbero potenzialmente far uscire il programma, penso che potresti incontrare dei problemi.

    
risposta data 20.05.2015 - 14:22
fonte

Leggi altre domande sui tag