Pages: [1] 2   Bas de page
Imprimer
Auteur Fil de discussion: Vous et les exceptions  (Lu 2579 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 929


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« 13 Février 2012, 15:26:26 »

Salut à tous,

J'ouvre encore un petit sujet pour discuter  Azn

Cette fois-ci j'avais envie de parler des exceptions.
L'idée me vient parce que l'autre jour en cours d'info, le prof nous a dit qu'en pratique, pour un algorithme de recherche on procèderait avec l'aide des exceptions et ça m'avait parût bizarre.

Je comprends l'idée, je vois pourquoi ça marche, mais c'est vrai que j'avais tendance à croire qu'on les utilisait plutôt pour gérer des erreurs… exceptionnelles Langue
Comme c'est le cas des exceptions de base.

D'ailleurs la syntaxe le sous-entend aussi : try… catch (ou try with avec Caml light dans mon cas, et d'ailleurs c'est un peu bizarre mais bon).

Pour comprendre ce que veux dire, et si ça vous intéresse, voici l'algo de recherche dans une liste avec Caml Light qu'on a vu en cours :
Code: (ocaml)
exception trouve of int;;

let place x t =
   try for i=0 to (vect_length t -1) do
      if t.(i) = x then raise (trouve i);
   done;
   with trouve k -> k;;

Vous, vous utilisez les exception ? Si oui dans quels cas ?
Journalisée


Pas si petit…
t4ils Hors ligne
Branleur
Elite Member
**
Messages: 963


Voir le profil WWW
« Réponse #1 : 13 Février 2012, 16:11:53 »

Il m'est arrivé d'utiliser des exceptions crades mais ça reste rare.
J'appelle exceptions crades les endroits où un simple test permet d'éviter l'exception (parseInt(), division par 0 ...)

Sinon je suis plutôt Pokemon exception :
Code:
try {
    [...]
}catch(Exception e) { // Gotta catch 'em all !
    [...]
}

Je n'utilise pas les exceptions pour m'aider dans mon code (comme ton exemple en Caml), mais plutôt pour vraiment faire un catch d'une erreur que je n'avais pas prévu, et la corriger pour qu'elle n'apparaisse plus ensuite Smiley
Journalisée

Le codage amateur ? Parce que je le veux bien.
Reyhn Hors ligne
Jr. Member
**
Messages: 95


Voir le profil
« Réponse #2 : 13 Février 2012, 16:21:07 »

A mon grand désarroi les profs d'info sont plutôt pas terrib' pour expliquer les exceptions et leur utilité.
De mon vécu (je suis peut-être une exception  police ) on les voit "parce qu'il le faut" mais on apprend pas vraiment à quoi ça sert en vrai ni comment bien les utiliser. J'ai beau les avoir vues en Java et C++, ça reste très flou ...
Journalisée
Zipler Hors ligne
Full Member
***
Messages: 106


Voir le profil
« Réponse #3 : 13 Février 2012, 16:32:09 »

En caml c'est plutôt par commodité que l'on fait ça vu qu'il n'y a pas notamment d'instruction "break" (ni continue d'ailleurs).
Journalisée
Valryon Hors ligne
Sr. Member
****
Messages: 331


Voir le profil WWW
The World ends with you !

« Réponse #4 : 13 Février 2012, 16:47:39 »

En caml c'est plutôt par commodité que l'on fait ça vu qu'il n'y a pas notamment d'instruction "break" (ni continue d'ailleurs).

A mon avis la réponse est là, même si c'est possible je n'ai jamais vu en Java ou C# une exception utilisée pour sortir proprement d'une boucle.

Elles sont globalement plus réservées aux erreurs ou aux dysfonctionnements : time out, division par 0, référence null, etc.

Même si d'un point de vue algorithmique ça se tient, le même algo de tri en # ou Java sera considérablement ralenti par les try/catch et la gestion d’exception, surtout face à un break/continue.
Journalisée

Développeur professionnel et passionné de jeu vidéo, auteur de The Great Paper Adventure (PC/X360) :
-> http://www.thegreatpaperadventure.com
Sheeft Hors ligne
Petit slip
Vraiment petit
*
Messages: 929


Voir le profil WWW
sexe : oui (ndPyroh : Ouais ouais...)

« Réponse #5 : 13 Février 2012, 19:52:13 »

Ouais je pense que tu as raison, c'est un peu dommage cette absence de break parce que c'est bien pratique. Pareil, il n'y a pas de return et pour moi, ça manque.
Journalisée


Pas si petit…
EvilTroopa Hors ligne
Administrateur
*****
Messages: 649


Voir le profil WWW
1010011010 the Number of the Beast

« Réponse #6 : 13 Février 2012, 20:26:05 »

Après avoir un peu expérimenté les échanges réseau y'a quelques jours (en java), les exceptions c'était le seul moyen que j'avais pour sortir d'un thread qui écoutait sur un port...

J'ai un peu regardé dans les différentes démos que j'ai pu trouver sur le net, les exceptions sont systématiquement utilisées, à plus ou moins bon escient. Des fois, c'est juste pour sortir et afficher une erreur dans la console. Des fois il y avait une gestion un peu plus poussée des éléments du thread.

Perso, en java, je les utilise assez souvent, mais comme t4ils, surtout pour essayer de pallier à des bugs auxquels j'aurais pas pensé.
Journalisée

A mushroom a day, keeps the koopas away.
Zipler Hors ligne
Full Member
***
Messages: 106


Voir le profil
« Réponse #7 : 15 Février 2012, 18:05:38 »

Sinon, pour ce qui est du C/C++, j'ai l'habitude suivante: en C, je n'utilise pas les exceptions mais des codes d'erreur et remplissage de stderr (ou pas); en  c++ je ne les utilise que dans les constructeurs pour faire du RAII, pour le reste, je laisse planter, et la version debug m'indique pourquoi grâce aux asserts que je mets un peu partout.
Journalisée
t4ils Hors ligne
Branleur
Elite Member
**
Messages: 963


Voir le profil WWW
« Réponse #8 : 16 Février 2012, 01:46:54 »

Zipler, laisser planté une appli c'est peut être no problemo en solo, mais quand tu développes l'application à destination de collaborateurs de ton entreprise, il est très mal vu de voir des messages de plantage avec stack trace Langue (c'est un peu violent lol)

Les exceptions permettent donc aussi au maximum de ne pas déranger l'utilisateur si dès problèmes surviennent, et de présenter un message plus user friendly tout en loguant et avertissant le codeur du problème rencontré Wink
Journalisée

Le codage amateur ? Parce que je le veux bien.
Zipler Hors ligne
Full Member
***
Messages: 106


Voir le profil
« Réponse #9 : 17 Février 2012, 07:45:00 »

Le truc c'est que je fais beaucoup de vérifications dans le code (tous les paramètres de fonctions, variables intermediaires, verification de chaque alloc, utilisation d'un log, passage dans valgrind). Quand je dis que je n'utilse pas les exceptions, c'est juste que dans le cas où une survient et qu'elle n'est pas rattrapée immédiatement, c'est que c'est très grave, donc un plantage est peut-être la meilleure solution Azn. C'est vrai que c'est pas l'idéal pour l'entreprise, mais pour l'instant ça me suffit pour mon utilisation individuelle Smiley.
Journalisée
Campanile Hors ligne
Elite Member
**
Messages: 925


Voir le profil WWW
sic

« Réponse #10 : 18 Février 2012, 16:15:03 »

Zipler, laisser planté une appli c'est peut être no problemo en solo, mais quand tu développes l'application à destination de collaborateurs de ton entreprise, il est très mal vu de voir des messages de plantage avec stack trace Langue (c'est un peu violent lol)

Les exceptions permettent donc aussi au maximum de ne pas déranger l'utilisateur si dès problèmes surviennent, et de présenter un message plus user friendly tout en loguant et avertissant le codeur du problème rencontré Wink
Alors ça ça dépend de l'entreprise  Grin Allez hop petit hs :
Chez moi on balance les (très très fréquentes) stacks trace aux utilisateurs (plusieurs milliers sur la France)  Smiley
Alors oui, c'est des cochons les développeurs, mais y'a pire, y'a les chefs de projet, quand on leur fait remarquer que c'est pas sympa pro le pauvre utilisateur (je suis côté intégration), c'est qu'ils remplacent la pile par un "Problème technique - Contactez votre administrateur" sans la moindre info sur la cause de l'anomalie. Ou pire de pire, un try avec un catch tout vide Smiley
Je pense que je suis dans la boîte ou on se fout des utilisateur et ou on programme le plus mal d'Europe, et j'en suis pas vraiment fier Smiley
Journalisée

L'expérience, c'est ni plus ni moins qu'une petite quantité d'information qui aurait été fort utile quelques secondes avant qu'on l'apprenne...
Valryon Hors ligne
Sr. Member
****
Messages: 331


Voir le profil WWW
The World ends with you !

« Réponse #11 : 18 Février 2012, 16:42:58 »

Je pense que je suis dans la boîte ou on se fout des utilisateur et ou on programme le plus mal d'Europe, et j'en suis pas vraiment fier Smiley

Tu es en SSII quoi Langue
Même expérience chez un des géants du genre, on laissait les stacktraces en intégration pour pouvoir plus facilement débugguer, mais seulement pour les grosses erreurs imprévues.

Les utilisateurs n'étaient pas super contents du message affiché, mais une capture d'écran et hop on pouvait résoudre plus facilement le problème. Du coup ils étaient un peu contents quand même.
Journalisée

Développeur professionnel et passionné de jeu vidéo, auteur de The Great Paper Adventure (PC/X360) :
-> http://www.thegreatpaperadventure.com
t4ils Hors ligne
Branleur
Elite Member
**
Messages: 963


Voir le profil WWW
« Réponse #12 : 18 Février 2012, 18:36:40 »

bah euh les gars, je comprends pas tout à vos méthodes là Langue
Moi j'affiche bien erreur technique à l'utilisateur, mais la stack trace reste dans le code quoi Langue

J'affiche à l'utilisateur le message de l'exception à rapporter à la hotline de l'entreprise, mais pas plus Langue
La stack trace est dans un log, qu'on consultera par la suite.

Vous loguez rien ? Azn
Journalisée

Le codage amateur ? Parce que je le veux bien.
EvilTroopa Hors ligne
Administrateur
*****
Messages: 649


Voir le profil WWW
1010011010 the Number of the Beast

« Réponse #13 : 18 Février 2012, 18:44:04 »

Chez nous, on n'affiche pas d'erreurs en prod et on log tout dans des fichiers.
Les exceptions et autres erreurs sont aussi envoyées par email sur la boite mail du service informatique.

Chaque page est entourée par un gros try/catch pour être sûr qu'aucune erreur ne ressorte dans le html. C'est un peu bourrin, mais ça marche bien Smiley
Journalisée

A mushroom a day, keeps the koopas away.
PypeBros Hors ligne
Hero Member
*****
Messages: 724


Voir le profil WWW
Posez-vous les bonnes questions

« Réponse #14 : 24 Février 2012, 09:41:12 »

Cette fois-ci j'avais envie de parler des exceptions.
L'idée me vient parce que l'autre jour en cours d'info, le prof nous a dit qu'en pratique, pour un algorithme de recherche on procèderait avec l'aide des exceptions et ça m'avait parût bizarre.
Pour info, les exceptions en OCaml sont ~300x plus rapides qu'en C++ (selon un collègue qui fait de l'OCaml quotidiennement). C'est quelque-chose à prendre en compte, évidemment.
Journalisée

Pages: [1] 2   Haut de page
Imprimer

Aller à: