Ca, c'est pour le squelette individuel.
Les exceptions sont extrêmement verbeuses dans des fonctions courtes (4 lignes effectives ici) quand on veut traiter une ou plusieurs erreurs, ce qui me semble être le but originel (si c'est juste pour logguer, franchement, on a vu mieux que les exceptions de C++, à commencer par celles de java qui affichent toute la stack automatiquement, et qui accessoirement a un compilateur qui râle, de mémoire, quand les exceptions ne sont pas toute gérées... c'est à dire une véritable intégration dans le langage).
En théorie, sur une fonction longue, avec juste une partie des erreurs traitées (ou avec aucune traitées), ce qui serait l'intérêt, alors oui, le code est plus clean et plus court, mais bon perso j'évite au maximum les erreurs longues...
Il y a aussi le problème que, dans un catch(), tu catches l'erreur de quelle ligne, au fait? En C++, l'info est perdue.
Dans une gestion des erreurs traditionnelle avec RAII, je fait juste:
#define xstr(s) str(s)
#define str(s) #s
#define HEADER_LOG __FILE__ " [" str( __LINE__ ) "]: "
...
class bla
{
public:
bla( void ) = default;
bla( bla const& ) = default;
bla( bla&& ) = default;
bla& operator=( bla const& ) = default;
bla& operator=( bla&& ) = default;
~bla( void ) = default;
//oupa, selon qu'on doit gérer des trucs nus...
static bla create_bla_from_network( foobar )
{
bla ret;
if ( do_something( foobar ) ) { return bla(); }
return ret;
}
bool operator==( bla const& o ){...; return result; }
};
bool hello()
{
auto world = bla::create_bla_from_network( foobar );
if( wold == bla() )
{
fputs( HEADER_LOG "bla bla\n", stderr );
return true;
}
}
Et je garde l'info de l'endroit ou le problème s'est produit, contrairement a ce que font les exceptions en C++.
[^] # Re: Pas de fumée sans feu
Posté par freem . En réponse au journal De l'influence néfaste de Google sur les développeurs C++. Évalué à 6.
Avec la gestion des exceptions, c'est plutôt:
Sans les exceptions:
Ca, c'est pour le squelette individuel.
Les exceptions sont extrêmement verbeuses dans des fonctions courtes (4 lignes effectives ici) quand on veut traiter une ou plusieurs erreurs, ce qui me semble être le but originel (si c'est juste pour logguer, franchement, on a vu mieux que les exceptions de C++, à commencer par celles de java qui affichent toute la stack automatiquement, et qui accessoirement a un compilateur qui râle, de mémoire, quand les exceptions ne sont pas toute gérées... c'est à dire une véritable intégration dans le langage).
En théorie, sur une fonction longue, avec juste une partie des erreurs traitées (ou avec aucune traitées), ce qui serait l'intérêt, alors oui, le code est plus clean et plus court, mais bon perso j'évite au maximum les erreurs longues...
Il y a aussi le problème que, dans un catch(), tu catches l'erreur de quelle ligne, au fait? En C++, l'info est perdue.
Dans une gestion des erreurs traditionnelle avec RAII, je fait juste:
Et je garde l'info de l'endroit ou le problème s'est produit, contrairement a ce que font les exceptions en C++.