Ho visto programmi che usano questa strategia e ho anche visto post che considerano questa cattiva pratica. Tuttavia, i post che prendono in considerazione questa cattiva pratica sono stati scritti in C # o in qualche altro linguaggio di programmazione, in cui sono incorporati alcuni errori di gestione. Questa domanda riguarda il c ++. Inoltre, gli errori che sto affrontando sono errori che sono abbastanza fatali da forzare un programma allo spegnimento, non un generale "forse-ho-ho-mancato-qualcosa-errore". Con l'utilizzo di espressioni al massimo livello intendo questo in un senso un po 'trascurato. Può essere qualcosa di simile
int main(){
try {
//run
} catch (fatalException){
//handle error and shutdown
}
}
o può essere qualcosa di simile ad esempio in un'applicazione grafica.
void runApplication(){
try {
//run
} catch (fatalException){
//handle error and shutdown
}
}
L'alternativa a questo sarebbe gestire questo errore dove accade e tornare gerarchicamente dalle funzioni, uno alla volta, fino alla fine del programma. La ragione per cui riesco a vedere per la terminazione di errori fatali da un try-catch al livello più alto è che i motivi di questo tipo di errore possono essere diversi, ed è probabilmente abbastanza insolito (database corrotti, alcuni errori di memoria insufficiente, configurazione corrotta file, ecc ...). Gestire le eccezioni localmente e tornare dalle funzioni uno alla volta renderebbe il codice meno chiaro e richiederà molto sforzo per gestire problemi che non si verifichino.
Tuttavia, non sono sicuro che sia una buona pratica avviare il programma con try
. Personalmente, penso che sia brutto, ma in qualche modo questa bruttezza riflette la bruttezza del problema stesso, quindi questo potrebbe non essere un motivo per non usarlo per questo caso.
Modifica Potrei aver frainteso il dupe post, ma non penso che questo risolva il problema. La domanda non riguarda il non prendere alcune eccezioni. Il punto è che nella maggior parte dei casi ci sono altre parti del codice che possono gestire l'eccezione più vicino al lancio in un modo abbastanza soddisfacente, ma al costo di dover passare attraverso la gerarchia verso l'alto e terminare. Tuttavia, dal momento che il programma avrebbe ancora bisogno di essere terminato, c'è in generale qualche motivo per coglierlo prima al livello più alto? Si può sostenere che ciò implica che i livelli inferiori non sono in grado di decidere come gestirlo. Ma in questo caso credo che non sia chiaro. Intendo "quale errore avrebbe l'autorità per determinare se un programma deve terminare?"