Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3481 connectés 

 


alors ?




Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Auteur Sujet :

De la bonne utilisation des exceptions (was: -- ou benou ?)

n°630732
chrisbk
-
Posté le 04-02-2004 à 11:09:00  profilanswer
 

Reprise du message précédent :

walli a écrit :


 
je fais aussi du J++  :kaola:  


 
[:rofl]
 
Aux abris, ca va peter [:totoz]

mood
Publicité
Posté le 04-02-2004 à 11:09:00  profilanswer
 

n°630738
walli
Posté le 04-02-2004 à 11:11:48  profilanswer
 

chrisbk a écrit :


 
[:rofl]
 
Aux abris, ca va peter [:totoz]
 


mais j'ai pas le choix [:jocenbsp]

n°630740
chrisbk
-
Posté le 04-02-2004 à 11:13:29  profilanswer
 

walli a écrit :


mais j'ai pas le choix [:jocenbsp]


 
bah j'imagine que vous allez un joru migrer a j#, ca ira tout de suite mieux [:itm]

n°630743
veryfree
Posté le 04-02-2004 à 11:17:14  profilanswer
 

:)

n°630745
walli
Posté le 04-02-2004 à 11:18:30  profilanswer
 

chrisbk a écrit :


 
bah j'imagine que vous allez un joru migrer a j#, ca ira tout de suite mieux [:itm]


 
meme pas sure  [:spamafote]  
mais nous nous eloignons du sujet initial de ce topic...

n°630754
chrisbk
-
Posté le 04-02-2004 à 11:26:13  profilanswer
 

walli a écrit :


mais nous nous eloignons du sujet initial de ce topic...


 
tout a fait. D'ailleurs tu as soulevé un excellent point(tm) : la surabondance de catch() entraine une baisse de lisibilité dans le code.
 
Vaut il mieux alors faire :
->Une classe de base pour les exceptions (Genre IOException) et une peletté de sous classe pour tout les cas possible
->Faire une seule classe qui embarquera un flag indiquant le type d'erreur
->Les deux (sous classes + flag dans la super classe)
 
Le peu de cout de la troisieme version ainsi que sa flexibilité et le grain en lisibilité me ferait tendre vers cette solution.

n°630773
darklord
You're welcome
Posté le 04-02-2004 à 11:40:27  profilanswer
 

chrisbk a écrit :


 
[:rofl]
 
Aux abris, ca va peter [:totoz]
 


 
[:rofl2]

n°630775
benou
Posté le 04-02-2004 à 11:43:25  profilanswer
 

Votre logique me déroute ...


---------------
ma vie, mon oeuvre - HomePlayer
n°630780
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-02-2004 à 11:48:10  profilanswer
 

http://balr0g.free.fr/hfr/img/frilleugly.jpg


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°630782
walli
Posté le 04-02-2004 à 11:51:29  profilanswer
 
mood
Publicité
Posté le 04-02-2004 à 11:51:29  profilanswer
 

n°630784
kadreg
profil: Utilisateur
Posté le 04-02-2004 à 11:52:51  profilanswer
 

chrisbk a écrit :


Le peu de cout de la troisieme version ainsi que sa flexibilité et le grain en lisibilité me ferait tendre vers cette solution.


 
 [:rotflmao] La solution de merde bien crade


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°630786
nraynaud
lol
Posté le 04-02-2004 à 11:55:31  profilanswer
 

chrisbk a écrit :


 
tout a fait. D'ailleurs tu as soulevé un excellent point(tm) : la surabondance de catch() entraine une baisse de lisibilité dans le code.
 
Vaut il mieux alors faire :
->Une classe de base pour les exceptions (Genre IOException) et une peletté de sous classe pour tout les cas possible
->Faire une seule classe qui embarquera un flag indiquant le type d'erreur
->Les deux (sous classes + flag dans la super classe)
 
Le peu de cout de la troisieme version ainsi que sa flexibilité et le grain en lisibilité me ferait tendre vers cette solution.

solution 1 mais en version hiérarchique pour classifier un peu les 12000 sous-classes.


---------------
trainoo.com, c'est fini
n°630793
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-02-2004 à 12:00:07  profilanswer
 

perso je ferrais la méthode de -- (si le fichier existe, on fait un bloc try/catch pour le cas où y aurait un autre type d'erreur)
mais y a une erreur dans les props du sondage :
"exist() + FileNotFoundException"
-> c'est un IOexception machin, pas filenotfound, :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°630797
benou
Posté le 04-02-2004 à 12:01:19  profilanswer
 

nraynaud a écrit :

solution 1 mais en version hiérarchique pour classifier un peu les 12000 sous-classes.


c'est déjà le cas de la IOException. Il y a pas assez de sous classe à ton gout mais elle entre dans ce schema ...


Message édité par benou le 04-02-2004 à 12:03:17

---------------
ma vie, mon oeuvre - HomePlayer
n°630801
benou
Posté le 04-02-2004 à 12:02:51  profilanswer
 

antp a écrit :

-> c'est un IOexception machin, pas filenotfound, :o


bha non, tu peux très bien catcher séparément la FileNotFoundException ... de toute façon la IO faudra la catcher. C'est la cas 1 ce que tu proposes.
 
Encore un qui a pas compris et qui du coup vote contre moi [:ruisseau de larmes]


---------------
ma vie, mon oeuvre - HomePlayer
n°630806
uriel
blood pt.2
Posté le 04-02-2004 à 12:05:09  profilanswer
 

benou a écrit :


Encore un qui a pas compris et qui du coup vote contre moi [:ruisseau de larmes]


 
ben moi j'ai voté pour toi  [:spamafote] (mais je dis pas que ce que je/tu fais est ce qu'il y a de mieux, l'explication de Dark tiens le route :/)


---------------
IVG en france
n°630807
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-02-2004 à 12:05:10  profilanswer
 

benou a écrit :


bha non, tu peux très bien catcher séparément la FileNotFoundException ... de toute façon la IO faudra la catcher. C'est la cas 1 ce que tu proposes.
 
Encore un qui a pas compris et qui du coup vote contre moi [:ruisseau de larmes]


 
dans l'exemple de code de -- y avait un if FileExist + un le catch de l'IO
dans ton exemple de code y a le catch de l'IO et le catch du FileNotFound.
je trouve juste que c'est plus joli un if qu'un catch pour le cas où ce fichier optionnel n'existe pas [:spamafote]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°630814
chrisbk
-
Posté le 04-02-2004 à 12:08:06  profilanswer
 

Dites, elles durent cbien de tps la phase de modelisation chez vous ? parce que si il vous faut 2j, trois sondages et deux enquetes pour savoir si il vaut mieux faire un if ou un catch pour tester la presence d'un fichier, j'ai un peu peur pour un projet de bonne taille [:petrus75]

n°630816
uriel
blood pt.2
Posté le 04-02-2004 à 12:08:55  profilanswer
 

chrisbk a écrit :

Dites, elles durent cbien de tps la phase de modelisation chez vous ? parce que si il vous faut 2j, trois sondages et deux enquetes pour savoir si il vaut mieux faire un if ou un catch pour tester la presence d'un fichier, j'ai un peu peur pour un projet de bonne taille [:petrus75]


 
[:xp1700]


---------------
IVG en france
n°630823
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-02-2004 à 12:12:06  profilanswer
 

chrisbk a écrit :

Dites, elles durent cbien de tps la phase de modelisation chez vous ? parce que si il vous faut 2j, trois sondages et deux enquetes pour savoir si il vaut mieux faire un if ou un catch pour tester la presence d'un fichier, j'ai un peu peur pour un projet de bonne taille [:petrus75]


Ca m'fait plaisir de lire ça, tiens :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°630829
chrisbk
-
Posté le 04-02-2004 à 12:16:46  profilanswer
 

Taiche a écrit :


Ca m'fait plaisir de lire ça, tiens :o


 
tu peux et' fier quand meme, t'as reussi a lancer du troll longue durée la :D

n°630830
nraynaud
lol
Posté le 04-02-2004 à 12:18:45  profilanswer
 

benou a écrit :

c'est déjà le cas de la IOException.

Mais j'ai pas dit le contraire bordel.


---------------
trainoo.com, c'est fini
n°630835
mareek
Et de 3 \o/
Posté le 04-02-2004 à 12:20:13  profilanswer
 

benou a écrit :


comme je l'ai déjà dit, ca dépend du context.
Ce qui est exceptionnel pour l'appelé ne l'est pas forcément pour l'appelant.
 
Exemple : tu récupères une chaine saise par l'utilisateur. Elle est sensée contenir un nombre.
 
Pour récupérer la valeur du nombre, tu fais un parseInt(). Cette méthode peut générer un NumberFormatException (ce qui est logique dans son contexte).  Toi tu dois catcher l'exception parce que le fait que l'utilisateur ait pu faire une bourde de saisie est logique dans ton contexte.  
 
Donc catcher une exception n'a rien de rare ou de bizarre, même dans un cas d'execution normal.  
 
Catcher une exception c'est fréquent. C'est la génération d'erreur qui doit rester exceptionnelle ...


Dans ce cas, je vérifierait que l'utilisateur a bien saisi un nombre (je sais pas comment on fait en java, mais en VB on a la fonction IsNumeric() pour ça) plutot que de traiter ça par une exception.
 
Les 2 solutions sont justes, mais (moi, personellement, moi même,) je préfère n'utiliser les exceptions que quand je ne peux pas faire autrement de manière simple.
[:spamafote]


Message édité par mareek le 04-02-2004 à 12:28:23

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°630837
uriel
blood pt.2
Posté le 04-02-2004 à 12:20:45  profilanswer
 

chrisbk a écrit :


 
tu peux et' fier quand meme, t'as reussi a lancer du troll longue durée la :D


 
et plein de subtilité [:aloy]


---------------
IVG en france
n°630857
mareek
Et de 3 \o/
Posté le 04-02-2004 à 12:30:00  profilanswer
 

chrisbk a écrit :

mais nan, c'est hyper safe le C, tant que tu n'utilises pas de pointeur [:itm]


autrement dit: "le C c'est hyper safe tant que tu ne programme pas avec" [:aloy]
 

benou a écrit :

Votre logique me déroute ...


je crois que c'est réciproque :/
 
 
Par curiosité, où as-tu apris à programmer ? et avec quel langage ?  
 
 

chrisbk a écrit :

Dites, elles durent cbien de tps la phase de modelisation chez vous ? parce que si il vous faut 2j, trois sondages et deux enquetes pour savoir si il vaut mieux faire un if ou un catch pour tester la presence d'un fichier, j'ai un peu peur pour un projet de bonne taille [:petrus75]


Tu ne voit pas la différence fondamentale de conception du monde que sous tend ces 2 méthodes ? Ne vois-tu point que selon le choix que tu fais, ta vie sera complètement différente ?
 
tu me déçois :pfff:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°630861
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-02-2004 à 12:31:28  profilanswer
 

mareek a écrit mais en fait c'est une quote mal foutue de benou, donc en fait c'est benou qui a écrit :


Exemple : tu récupères une chaine saise par l'utilisateur. Elle est sensée contenir un nombre.
 
Pour récupérer la valeur du nombre, tu fais un parseInt().  


mareek a écrit et là ui, c'est bien lui :


Dans ce cas, je vérifierait que l'utilisateur a bien saisi un nombre (je sais pas comment on fait en java, mais en VB on a la fonction IsNumeric() pour ça) plutot que de traiter ça par une exception.


Putain mais clairement +1 [:mlc]
'tain, ils ont pas foutu les RegExp en 1.4 uniquement pour alourdir le JDK, hein :o Perso, quand j'veux un nombre, soit c'est une GUI et là vlan, j'empêche directement l'écriture des lettres et de la ponctuation (sauf . si jamais j'veux des floats), soit c'est d'la ligne de commande et là RegExp à deux balles, quoi.
Passer par parseInt() et NumberFormatException, c'est cheum [:mlc] Tu m'déçois sur ce coup-là, benou :o


Message édité par Taiche le 04-02-2004 à 12:32:01

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°630862
nraynaud
lol
Posté le 04-02-2004 à 12:32:14  profilanswer
 

mareek a écrit :


Dans ce cas, je vérifierait que l'utilisateur a bien saisi un nombre (je sais pas comment on fait en java, mais en VB on a la fonction IsNumeric() pour ça) plutot que de traiter ça par une exception.
 
Les 2 solutions sont justes, mais (moi, personellement, moi même,) je préfère n'utiliser les exceptions que quand je ne peux pas faire autrement de manière simple.
[:spamafote]

Tu fais le boulot 2 fois, avec un parsing direct + catch tu ne passes qu'une seule fois sur le nombre. Dans ce cas c'est pas significatif, mais généraliser ce genre de comportement est une très mauvaise idée, t'as un code plus long, moins direct (le but, c'est bien de récupérer un nombre) et une complexité plus grande.


---------------
trainoo.com, c'est fini
n°630865
mareek
Et de 3 \o/
Posté le 04-02-2004 à 12:37:01  profilanswer
 

nraynaud a écrit :

Tu fais le boulot 2 fois, avec un parsing direct + catch tu ne passes qu'une seule fois sur le nombre. Dans ce cas c'est pas significatif, mais généraliser ce genre de comportement est une très mauvaise idée, t'as un code plus long, moins direct (le but, c'est bien de récupérer un nombre) et une complexité plus grande.


 
je vois pas pourquoi un if/else serait plus long qu'un try/catch :heink:  
 
 
Pour le reste, je crois que c'est une différence de point de vue et qu'il n'y a aucun intéret à argumenter vu que chacun restera sur ses positions.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°630871
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-02-2004 à 12:40:10  profilanswer
 

Taiche a écrit :

(sauf . si jamais j'veux des floats)


 
pas "." bordel :o mais "decimalSeparator" (doit bien y avoir un équivalent en Java)
ça me gonfle les softs où je dois taper un "." alors que sur mon pavé numérique j'ai une "," et que j'ai bien configuré la "," dans les options régionales :o
 
surtout que j'ai déjà vu des softs mal foutus (peu importe le langage, mais je sais que cette erreur est facile à faire en Delphi) où il laissait passer le "." et pas les autres, mais faisait la conversion via une fonction qui tenait compte du séparateur défini dans le système :
- "." -> erreur de conversion
- "," -> je peux pas l'entrer dans le champ
:/


Message édité par antp le 04-02-2004 à 12:42:01

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°630876
lorill
Posté le 04-02-2004 à 12:40:58  profilanswer
 

mareek a écrit :


je vois pas pourquoi un if/else serait plus long qu'un try/catch :heink:  


 

Code :
  1. if(estUnNombre(toto)) //necessite de parser toto
  2.   truc = conversion(toto) //deuxieme parsing
  3. else
  4.   pan !


 

Code :
  1. try {
  2.   truc = conversion(toto) //un seul parsing
  3. } catch(....) {
  4.   pan !
  5. }

n°630877
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-02-2004 à 12:41:10  profilanswer
 

antp a écrit :


pas "." bordel :o mais "decimalSeparator" (doit bien y avoir un équivalent en Java)


Ui y a ça, c'est bon, on parle d'un exemple, en plus :o
 
 
(putain, chu aux trolls ce qu'un cochon est aux truffes [:kunks])


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°630880
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-02-2004 à 12:42:33  profilanswer
 

Taiche a écrit :


Ui y a ça, c'est bon, on parle d'un exemple, en plus :o


 
on sait jamais, quand je vois certains guignols :o
c'était mon coup de gueule du jour :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°630882
mareek
Et de 3 \o/
Posté le 04-02-2004 à 12:42:59  profilanswer
 

lorill a écrit :


 

Code :
  1. if(estUnNombre(toto)) //necessite de parser toto
  2.   truc = conversion(toto) //deuxieme parsing
  3. else
  4.   pan !


 

Code :
  1. try {
  2.   truc = conversion(toto) //un seul parsing
  3. } catch(....) {
  4.   pan !
  5. }




Et lever une exception, c'est gratuit peut-être ? :sarcastic:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°630889
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-02-2004 à 12:43:47  profilanswer
 

mareek a écrit :


Et lever une exception, c'est gratuit peut-être ? :sarcastic:  


Roh, ça coûte un objet à peine, c'est pas un new qui plombe les perfos :o
 
 
 
...
 
 
 
Ah merde, si :D


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°630893
lorill
Posté le 04-02-2004 à 12:45:40  profilanswer
 

mareek a écrit :


Et lever une exception, c'est gratuit peut-être ? :sarcastic:  


ex1 :
  parsing 2x pour les saisies correctes, on pénalise l'utilisateur qui fait pas de gaffe
 
ex2 :  
  on pénalise celui qui se plante, ce qui n'est pas censé etre la majorité. Si on saisit un gros nombre, le double parsing est probablement plus couteux que le jetage d'exception.
 
je parierais sur l'ex2 en terme de perf globale sur un cas d'utilisation normal.

n°630895
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-02-2004 à 12:46:45  profilanswer
 

faut voir, parce que si en interne la fonction FileExist fait un gros try/catch pour tester si le fichier existe... :whistle:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°630898
uriel
blood pt.2
Posté le 04-02-2004 à 12:49:32  profilanswer
 

lorill a écrit :


ex1 :
  parsing 2x pour les saisies correctes, on pénalise l'utilisateur qui fait pas de gaffe
 
ex2 :  
  on pénalise celui qui se plante, ce qui n'est pas censé etre la majorité. Si on saisit un gros nombre, le double parsing est probablement plus couteux que le jetage d'exception.
 
je parierais sur l'ex2 en terme de perf globale sur un cas d'utilisation normal.


 
je mise aussi là dessus, l'exception est pas censé être levé sauf cas particulier, donc autant miser la perf sur la tournure normal du process


---------------
IVG en france
n°630899
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-02-2004 à 12:49:38  profilanswer
 

(c'est génial, ça part en latte dans tous les sens, suffit de poster un exemple et y a 10 posts qui se créent :sol: )


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°630918
mareek
Et de 3 \o/
Posté le 04-02-2004 à 12:57:51  profilanswer
 

lorill a écrit :


ex1 :
  parsing 2x pour les saisies correctes, on pénalise l'utilisateur qui fait pas de gaffe
 
ex2 :  
  on pénalise celui qui se plante, ce qui n'est pas censé etre la majorité. Si on saisit un gros nombre, le double parsing est probablement plus couteux que le jetage d'exception.
 
je parierais sur l'ex2 en terme de perf globale sur un cas d'utilisation normal.


il faut voir aussi l'impact sur les perfs des 2 méthodes. si le parsing est aussi lourd ou plus lourd que la levé d'une exception, c'est sûr que tu as raison (à condition d'avoir des utilisateurs qui ne soient pas polios ce qui n'est pas gagné), mais si la levé d'exception prends une plombe, c'est pas sûr que la méthode 2 soit plus efficace.
 
Il faudrait savoir aussi ce que tu fais après aoir récupéré la saisie de l'utilisateur. Si tu t'engage dans un traitement long, la méthode 1 est est plus appropriée puisque l'utilisateur sera plus rapidement averti de son erreur éventuelle et dans le cas contraire, ça ne fait qu'allonger un traitement long de façon négligeable.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°630923
kadreg
profil: Utilisateur
Posté le 04-02-2004 à 12:59:33  profilanswer
 

Taiche a écrit :


Roh, ça coûte un objet à peine, c'est pas un new qui plombe les perfos :o


 
Bah effectivement, non : http://www-106.ibm.com/developerwo [...] =drs-j0504


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°630925
uriel
blood pt.2
Posté le 04-02-2004 à 13:00:58  profilanswer
 

mareek a écrit :

dans le cas contraire, ça ne fait qu'allonger un traitement long de façon négligeable.


 
la prochaine fois il fera attention à ce qu'il entre dans la case, c'est ca aussi la beauté de la chose, on eduque le user  :sol:


---------------
IVG en france
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4

Aller à :
Ajouter une réponse
 

Sujets relatifs
[VB] Utilisation dynamique de controls ?[C#] Utilisation correct de UpdateCommand [DataAdapter]
[C*UNIX]Utilisation du microphone !utilisation de prompt
utilisation d'une classe abstraiteUtilisation de dbExpress sous Delphi 7
[C] Utilisation de scandir..[HS]Bonne année à tous + UnlimitedParty
[VB6] Utilisation TreeView ?[C++] Utilisation de Scheme au sein d'une application C++
Plus de sujets relatifs à : De la bonne utilisation des exceptions (was: -- ou benou ?)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)