Pourquoi ?
Bah parce que je pense (je me trompe peut-être mais j'en doute) que ça correspond à une bonne logique de programmation et de découpage.
Comme par moment passer par un pattern adaptateur, ou un pattern proxy.
Concernant tout ceci je cherche de la doc, mais mon petit doigt me dit que j'ai raison
Edit :
Avant de trouver de la doc, je rajoute quand même quelque trucs concernant ton exemple et comment je vois les choses :
(lancée) = return true;
(cooldown, 3 secondes) = throw new ExceptionCoolDown(3);
(silenced) = throw new ExceptionSilenced();
(no target) = throw new ExceptionNoTarget();
(bad target, friend) = throw new ExceptionTargetFriend();
(trop loin, 25 mètres) = throw new ExceptionFarAway(25);
Mais si on veut faire encore plus propre, on fait plutôt :
(lancée) = return true;
(cooldown, 3 secondes) = throw new CastingException('cooldown', 3);
(silenced) = throw new CastingException('silenced');
(no target) = throw new CastingException('notarget');
(bad target, friend) = throw new CastingException('wrongtarget', 'friend');
(trop loin, 25 mètres) = throw new CastingException('toofar', 25);
Et si je réfléchis à un code découpé ainsi, qui soit me return true, soit me lance des exceptions pour me dire pourquoi il n'a pas pu faire l'action demandé.
Pour moi il y a aucun doute possible, c'est largement plus propre.
Bah parce que je pense (je me trompe peut-être mais j'en doute) que ça correspond à une bonne logique de programmation et de découpage.
Comme par moment passer par un pattern adaptateur, ou un pattern proxy.
Concernant tout ceci je cherche de la doc, mais mon petit doigt me dit que j'ai raison
Edit :
Avant de trouver de la doc, je rajoute quand même quelque trucs concernant ton exemple et comment je vois les choses :
(lancée) = return true;
(cooldown, 3 secondes) = throw new ExceptionCoolDown(3);
(silenced) = throw new ExceptionSilenced();
(no target) = throw new ExceptionNoTarget();
(bad target, friend) = throw new ExceptionTargetFriend();
(trop loin, 25 mètres) = throw new ExceptionFarAway(25);
Mais si on veut faire encore plus propre, on fait plutôt :
(lancée) = return true;
(cooldown, 3 secondes) = throw new CastingException('cooldown', 3);
(silenced) = throw new CastingException('silenced');
(no target) = throw new CastingException('notarget');
(bad target, friend) = throw new CastingException('wrongtarget', 'friend');
(trop loin, 25 mètres) = throw new CastingException('toofar', 25);
Et si je réfléchis à un code découpé ainsi, qui soit me return true, soit me lance des exceptions pour me dire pourquoi il n'a pas pu faire l'action demandé.
Pour moi il y a aucun doute possible, c'est largement plus propre.