05-03-2010, 01:55 AM
(Modification du message : 05-03-2010, 02:12 AM par Sephi-Chan.)
Les exceptions sont juste un moyen technique de gérer les erreurs inattendues.
Ils ne doivent pas nécessaire remplacer les tests conditionnels : comme leur nom l'indique, c'est pour gérer les événements exceptionnelles. Et ça permet à ton application d'arriver à se remettre sur pied toute seule quand une telle erreur se produit.
Un petit exemple (en Ruby…) :
Toujours persuadé que ça manque de puissance ? iffle:
Après, c'est sûr qu'en PHP, tu perds un peu d'intérêt avec son support limité, mais bon…
Ça reste super pratique pour faire des programmes robustes !
En ce qui me concerne, je crée une extension par type d'erreur exceptionnelle. Au final il n'y en a pas des masses : j'en ai une dizaine sur un petit jeu.
Je t'encourage à jeter un œil (NotThrowablePieceOfBodyError !) à l'article Système de gestion d'exceptions. Il explique bien les enjeux d'un tel système.
Dans le cas de nos jeux, il y a un argument qui me plaît bien :
Sephi-Chan
Ils ne doivent pas nécessaire remplacer les tests conditionnels : comme leur nom l'indique, c'est pour gérer les événements exceptionnelles. Et ça permet à ton application d'arriver à se remettre sur pied toute seule quand une telle erreur se produit.
Un petit exemple (en Ruby…) :
begin
@planet = @user.planets.find(planet_id) # Lance une ActiveRecord::RecordNotFound si aucune planète n'est trouvée.
@planet.do_something_on_the_planet # On serait comme des cons sans planète !
rescue ActiveRecord::RecordNotFound
@user.planets.create :name => Planet.generate_planet_name
retry # Try again, noob ! Recommence le bloc depuis begin. Ça n'existe pas en PHP.
else
# Si c'est un autre type d'exception, on fait autre chose…
ensure
# C'est l'équivalent du finally du Java.
# Ce qui est là sera toujours effectué, exception ou non.
# C'est donc très pratique pour fermer un flux, une connexion, etc.
# Hélas, ça n'existe pas en PHP non plus…
end
Toujours persuadé que ça manque de puissance ? iffle:
Après, c'est sûr qu'en PHP, tu perds un peu d'intérêt avec son support limité, mais bon…
Ça reste super pratique pour faire des programmes robustes !
En ce qui me concerne, je crée une extension par type d'erreur exceptionnelle. Au final il n'y en a pas des masses : j'en ai une dizaine sur un petit jeu.
Je t'encourage à jeter un œil (NotThrowablePieceOfBodyError !) à l'article Système de gestion d'exceptions. Il explique bien les enjeux d'un tel système.
Dans le cas de nos jeux, il y a un argument qui me plaît bien :
Wikipedia a écrit :Dans les langages de programmation sans SGE, on n'a pas d'outil pour séparer l'exécution normale et l'exécution exceptionnelle du programme. Un algorithme, dont l'exécution normale s'exprime de façon simple et élégante, peut devenir illisible (et donc difficile à maintenir) une fois « enrobé » par une logique de traitement des situations exceptionnelles ; disposer au niveau du langage de programmation d'une syntaxe pour différencier l'exécution normale de l'exécution dans un contexte exceptionnel peut être utile.
Sephi-Chan