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

  FORUM HardWare.fr
  Programmation
  Java

  Pour les artistes: quel code préférez vous?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Pour les artistes: quel code préférez vous?

n°950919
H4dd3R
Q2
Posté le 11-01-2005 à 16:58:14  profilanswer
 

Bon ok, c du c++, mais ça n'a pas d'importance, et j'ai pensé que j'aurais plus de gens habitués aux exceptions sur java.
 
C un exemple tt con. La fonction FctArray() envoie une Exception au bout d'un certain index.
 

Code :
  1. //////////////////////////////////////////////////////////////////////////
  2. i=0;
  3. bool bFinished=false;
  4. while(!bFinished)
  5. {
  6.  try
  7.  { // Exception si en dehors du range.
  8.   FctArray(i++);
  9.  }
  10.  catch(Exception) {bFinished=true;}
  11. }
  12. //////////////////////////////////////////////////////////////////////////
  13. i=0;
  14. try
  15. {
  16.  while(true)
  17.  { // Exception si en dehors du range.
  18.   FctArray(i++);
  19.  }
  20. }
  21. catch(Exception) {}


Au boulot on me reproche de préférer la deuxième écriture.. J'avoue avoir du mal à supporter la première qd à moi. ;)
 
 
 
Il m'arrive aussi d'écrire des chose du genre:

Code :
  1. try
  2. {
  3.    // fct susceptible d'envoyer une exception.
  4.    fct();
  5.    // Comportement spécifique en cas de succès de fct().
  6.    ...
  7. }
  8. catch(Exception)
  9. {
  10.    // Comportement spécifique en cas d'échec de fct().
  11.    ...
  12. }


Ceci m'amène, si les comportements spécifiques nécessitent aussi la gestion d'exceptions (ds le cas de gros algos c fort probable), à avoir des exceptions imbriquées..
Critiquable aussi, ou tout à fait normal (et même préférable à une collection de if/else imbriqués)?
 
Merci.

mood
Publicité
Posté le 11-01-2005 à 16:58:14  profilanswer
 

n°950927
jagstang
Pa Capona ಠ_ಠ
Posté le 11-01-2005 à 17:06:03  profilanswer
 

en principe on ne doit pas jouer ainsi avec les exception. je veux dire par là. ton prog ne doit pas fonctionner avec celle-ci.
 
une levée d'exception est très lourde pour le système. si tu as un tableau de 100 éléments, je pense que la prémière solution est plus rapide.
 
rien n'empêche d'utiliser la première, c'est pas très catholique. Un peu comme ne pas utiliser de frein et d'attendre le déclenchement de l'airbag :D

n°951009
therier
heu...coucou!
Posté le 11-01-2005 à 18:19:06  profilanswer
 

JagStang a écrit :

en principe on ne doit pas jouer ainsi avec les exception. je veux dire par là. ton prog ne doit pas fonctionner avec celle-ci.


 
Tout pareil!
 
Quand tu fais une boucle, tu dois savoir quand t'arreter...
 

n°951032
SomeBugsIn​Me
life suxx
Posté le 11-01-2005 à 18:44:39  profilanswer
 

les exceptions sont en principe à n'utiliser que pour gérer les erreurs. En général, j'évite de les utiliser pour gérer les cas normaux dans le déroulement du prog.

n°951041
Jubijub
Parce que je le VD bien
Posté le 11-01-2005 à 19:03:51  profilanswer
 

si nraynaud passe ici, c pelle à clou assurée :)


---------------
Jubi Photos : Flickr - 500px
n°951399
esox_ch
Posté le 12-01-2005 à 08:03:55  profilanswer
 

Pareil, je vote pour la 1ere. QUand j'ai commancer le Java j'avais la mauvaise habitude d'utiliser les exceptions pour executer des bouts de code ... Une fois un gentil gaillard m'a mis en croix sur un forum, je n'ai jamais plus recidivé :p

n°951401
Lam's
Profil: bas.
Posté le 12-01-2005 à 08:10:09  profilanswer
 

Jubijub a écrit :

si nraynaud passe ici, c pelle à clou assurée :)


A mon avis, c'est pour ça qu'il ne poste pas ça en cat C++. Car il sait ce qui lui arriverait.  ;)

n°951423
nraynaud
lol
Posté le 12-01-2005 à 09:18:38  profilanswer
 

itérateur bordel :fou:

n°951426
Taz
bisounours-codeur
Posté le 12-01-2005 à 09:21:33  profilanswer
 

si déjà t'apprenais à te servir des exception, ça aiderait beaucoup ... sans référence, tu vas dans le mur.
 
Et en plus, ton usage est exactement ce à quoi ne servent pas les exceptions ...

n°951454
H4dd3R
Q2
Posté le 12-01-2005 à 10:10:14  profilanswer
 

Bon je vois que je suis un peu isolé à penser comme ça..
Mais si qqun avancait une raison (plutôt qu'une habitude), ça m'aiderait à comprendre..
Par exemple, esox_ch, pquoi n'as tu plus jamais récidivé? Quel était le défaut de la méthode?

mood
Publicité
Posté le 12-01-2005 à 10:10:14  profilanswer
 

n°951456
patachou
Posté le 12-01-2005 à 10:22:54  profilanswer
 

JagStang a écrit :

en principe on ne doit pas jouer ainsi avec les exception. je veux dire par là. ton prog ne doit pas fonctionner avec celle-ci.
 
une levée d'exception est très lourde pour le système.


 
Ca m'a l'air d'etre une bonne raison d'éviter de s'en servir quand il n'y a pas lieu.

n°951457
benou
Posté le 12-01-2005 à 10:26:27  profilanswer
 

Au fait, c'est quoi qui rend lourd la levée d'exception ?
après tout, c'est juste un dépilage de la pile d'appel (avec test de la présence d'un catch à chaque fois) + mise à disposition de l'exception...  
Ca semble pas particulièrement couteux, à priori ...


---------------
ma vie, mon oeuvre - HomePlayer
n°951458
schnapsman​n
Zaford Beeblefect
Posté le 12-01-2005 à 10:28:13  profilanswer
 

benou a écrit :

Au fait, c'est quoi qui rend lourd la levée d'exception ?
après tout, c'est juste un dépilage de la pile d'appel (avec test de la présence d'un catch à chaque fois) + mise à disposition de l'exception...  
Ca semble pas particulièrement couteux, à priori ...


bein les sauts inconditionels + dépilage c'est pas bien méchant, mais c'est aussi une allocation de l'instance de l'exception.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°951459
benou
Posté le 12-01-2005 à 10:29:10  profilanswer
 

schnapsmann a écrit :

bein les sauts inconditionels + dépilage c'est pas bien méchant, mais c'est aussi une allocation de l'instance de l'exception.


bha, l'allocation c'est pas bien méchant non plus quand même ...


---------------
ma vie, mon oeuvre - HomePlayer
n°951462
schnapsman​n
Zaford Beeblefect
Posté le 12-01-2005 à 10:33:10  profilanswer
 

benou a écrit :

bha, l'allocation c'est pas bien méchant non plus quand même ...


non mais pour un parcourt d'ensemble il vaut mieux jouer normalement avec les itérateurs que de compter sur le catch d'une exception "OutOfBoundWhathever", c'est quand même moins lourd.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°951464
Lam's
Profil: bas.
Posté le 12-01-2005 à 10:37:23  profilanswer
 

benou a écrit :

Au fait, c'est quoi qui rend lourd la levée d'exception ?
après tout, c'est juste un dépilage de la pile d'appel (avec test de la présence d'un catch à chaque fois) + mise à disposition de l'exception...  
Ca semble pas particulièrement couteux, à priori ...


Vu qu'il est en C++, je vais te faire une réponse C++:

Citation :

The cost of throwing an exception one level on a 990 MHz Intel Pentium is around 12-13 micro seconds in the plain GNU g++ implementation

. C'est suffisamment cher pour ne s'en servir qu'en cas... exceptionnels.
 
Le papier écrit pas les gars qui ont ajouté le support c++ au noyau linux donne plus d'infos:
http://netlab.ru.is/exception/KernelExceptions.pdf
 
En particulier, c'est le nettoyage de la pile qui coute le plus cher visiblement...

n°951467
benou
Posté le 12-01-2005 à 10:41:15  profilanswer
 

schnapsmann a écrit :

non mais pour un parcourt d'ensemble il vaut mieux jouer normalement avec les itérateurs que de compter sur le catch d'une exception "OutOfBoundWhathever", c'est quand même moins lourd.


je parlais dans le cas général. Dans ce cas précis, c'est évidement une bétise d'utiliser une exception ...
 

Lam's a écrit :

Vu qu'il est en C++, je vais te faire une réponse C++:


/o\
 
 
pour le chiffre donné, je suis surpris : ca doit quand même dépendre du context (exemple : la profondeur de la pile d'appel), c'est surprenant de donner un chiffre fixe, comme ca ...
 
 

Lam's a écrit :


Le papier écrit pas les gars qui ont ajouté le support c++ au noyau linux donne plus d'infos:
http://netlab.ru.is/exception/KernelExceptions.pdf


merci, j'irai jeter un coup d'oeil


---------------
ma vie, mon oeuvre - HomePlayer
n°951471
Lam's
Profil: bas.
Posté le 12-01-2005 à 10:47:53  profilanswer
 

benou a écrit :

pour le chiffre donné, je suis surpris : ca doit quand même dépendre du context (exemple : la profondeur de la pile d'appel), c'est surprenant de donner un chiffre fixe, comme ca ..


Bah visiblement non. Que ta pile fasse 1 octet ou 143000, ça reste du même ordre. Ce qui influe le plus, c'est la profondeur en terme de fonctions (et le chiffre donné correspond à une exception qui ne remonte qu'une seule fonction: "one level" )...
Après, comme le noyau linux ne contient pas de destructeurs (bah oui, vu qu'il y a pas de c++), ça ne tient pas compte de la destruction des objets... :)
 
 

n°951479
chrisbk
-
Posté le 12-01-2005 à 11:05:38  profilanswer
 

benou a écrit :

Au fait, c'est quoi qui rend lourd la levée d'exception ?
après tout, c'est juste un dépilage de la pile d'appel (avec test de la présence d'un catch à chaque fois) + mise à disposition de l'exception...  
Ca semble pas particulièrement couteux, à priori ...


 
(En c++ tu te farcis en plus l'appel des destructeurs que tu croises sur ton chemin)


Message édité par chrisbk le 12-01-2005 à 11:06:33
n°951481
Taz
bisounours-codeur
Posté le 12-01-2005 à 11:07:50  profilanswer
 

le fait est qu'une fin de séquence n'est pas une situatuin exceptionnelle.

n°951482
benou
Posté le 12-01-2005 à 11:07:51  profilanswer
 

chrisbk a écrit :

(En c++ tu te farcis en plus l'appel des destructeurs que tu croises sur tont chemin)


ouais mais si tu étais passé par un autre méchansime que l'exception (genre code d'erreur en retour de fonction), le résultat aurait été le même, nan ?
edit : je ne vois que le malloc des données de l'objet exception en surcout ...


Message édité par benou le 12-01-2005 à 11:09:33

---------------
ma vie, mon oeuvre - HomePlayer
n°951483
schnapsman​n
Zaford Beeblefect
Posté le 12-01-2005 à 11:10:57  profilanswer
 

benou a écrit :

ouais mais si tu étais passé par un autre méchansime que l'exception (genre code d'erreur en retour de fonction), le résultat aurait été le même, nan ?
edit : je ne vois que le malloc des données de l'objet exception en surcout ...


 
tout à fait, les desctructeurs font le ménage de manière automatique ce qui est l'apport majeur question "porpreté" des exceptions en c++


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°951484
schnapsman​n
Zaford Beeblefect
Posté le 12-01-2005 à 11:12:11  profilanswer
 

Lam's a écrit :

Bah visiblement non. Que ta pile fasse 1 octet ou 143000, ça reste du même ordre. Ce qui influe le plus, c'est la profondeur en terme de fonctions (et le chiffre donné correspond à une exception qui ne remonte qu'une seule fonction: "one level" )...
Après, comme le noyau linux ne contient pas de destructeurs (bah oui, vu qu'il y a pas de c++), ça ne tient pas compte de la destruction des objets... :)


 
ceci dit pour les exceptions full user space c'est bien moins couteux


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°951485
chrisbk
-
Posté le 12-01-2005 à 11:12:27  profilanswer
 

benou a écrit :

ouais mais si tu étais passé par un autre méchansime que l'exception (genre code d'erreur en retour de fonction), le résultat aurait été le même, nan ?
edit : je ne vois que le malloc des données de l'objet exception en surcout ...


 
oué mais la tu te prends tout d'un coup dans la face, d'une part, et de l'autre l'appel aux destructeurs dans le cas du code d'erreur se fait 'naturellement' (dans le code tu as des appels explicite a toto::~toto()) tandis qu'avec l'exception je suppose qu'il faut aller les chercher toi même. (tel objet doit avoir son destructeur d'appelé) et cette recherche doit te couter qqchose.
 
sur la tambouille intérieure de comment ca marche, j'en ai aucune idée


Message édité par chrisbk le 12-01-2005 à 11:12:56
n°951488
schnapsman​n
Zaford Beeblefect
Posté le 12-01-2005 à 11:16:52  profilanswer
 

chrisbk a écrit :

tandis qu'avec l'exception je suppose qu'il faut aller les chercher toi même.


les code flow "exceptionels" sont là pour ça non?


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°951489
benou
Posté le 12-01-2005 à 11:17:03  profilanswer
 

chrisbk a écrit :

tandis qu'avec l'exception je suppose qu'il faut aller les chercher toi même. (tel objet doit avoir son destructeur d'appelé) et cette recherche doit te couter qqchose.


sur ce point là, je vois pas de différence entre une levée d'exception et un "return;" par exemple ...  
et puis les objets locaux (dont il faut appeler le destructeur) sont tous sur la pile de toute façon => y a pas besoin d'aller les chercher bien loin...
 
mais je suis ok pour l'argument du "tout d'un coup dans la face" ;)
c'est peut être pour ca que la levée d'exception est moins critique en Java : la "destruction" des objets est désynchronisée par le GC ...


Message édité par benou le 12-01-2005 à 11:17:49

---------------
ma vie, mon oeuvre - HomePlayer
n°951491
Taz
bisounours-codeur
Posté le 12-01-2005 à 11:19:46  profilanswer
 

c'est aussi pourça que java A BESOIN de blocks finally

n°951492
chrisbk
-
Posté le 12-01-2005 à 11:20:44  profilanswer
 

schnapsmann a écrit :

les code flow "exceptionels" sont là pour ça non?


 
je te confesserais n'en avoir pas la moindre idée. Mon Muchnick ne parle pas du tout d'exceptions, et j'ai jamais creusé outre mesure. Par contre si tu veux faire un pety exposé, je suis tout ouïe

n°951495
schnapsman​n
Zaford Beeblefect
Posté le 12-01-2005 à 11:22:14  profilanswer
 

Taz a écrit :

c'est aussi pourça que java A BESOIN de blocks finally


bien sur, mais il n'y a pas besoin de s'énerver pour ça [:icon7]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°951497
Taz
bisounours-codeur
Posté le 12-01-2005 à 11:23:12  profilanswer
 

non, je m'énerve pas. Mais les destructeurs sont quand même géniaux pour cet aspect là.

n°951499
chrisbk
-
Posté le 12-01-2005 à 11:24:49  profilanswer
 

bin tu surcharge finalize [:icon7]
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ok, je sors [:petrus75]

n°951504
Taz
bisounours-codeur
Posté le 12-01-2005 à 11:27:14  profilanswer
 

c'est pas marrant

n°951506
chrisbk
-
Posté le 12-01-2005 à 11:28:24  profilanswer
 

tiens, en c#, si une exception est levé dans un block using(), ca appelle finalize() ?

n°951507
chrisbk
-
Posté le 12-01-2005 à 11:29:00  profilanswer
 

Taz a écrit :

c'est pas marrant


 
 
rooh fais pas ta tronche, t'as juste a rajouter un gc.collect() dans tous tes blocks catch pour que ca marche, et hoppe [:icon7]

n°951508
benou
Posté le 12-01-2005 à 11:29:21  profilanswer
 

Taz a écrit :

c'est aussi pourça que java A BESOIN de blocks finally


je vois pas bien la relation entre les deux ... tu peux préciser stp ?
 
edit : ha ! peut être pour closer les trucs avant de se barrer à cause de l'exception ...


Message édité par benou le 12-01-2005 à 11:30:00

---------------
ma vie, mon oeuvre - HomePlayer
n°951509
Taz
bisounours-codeur
Posté le 12-01-2005 à 11:30:58  profilanswer
 

ben oui,  sinon tu as une fuite de ressources. Ou un verrou non libéré, etc

n°951510
Taz
bisounours-codeur
Posté le 12-01-2005 à 11:32:35  profilanswer
 

usage canonique
 
 
res.acquire()
 
try
{
  // ...
}
finally
{
  res.release();
}

n°951511
benou
Posté le 12-01-2005 à 11:35:04  profilanswer
 

Taz a écrit :

usage canonique


ok, j'avais bien capté alors.
 
c'est vrai :jap:
 
Y a pas des cas où un release manuel des ressources est nécessaire ? (cas où le destructeur ne fait pas TOUT le boulot)  
y a pas de finally en C++ ?
 
 
(remarque : c'est moche, mais en Java tu peux aussi faire les release dans chaque catch, t'es pas obligé d'utiliser finally ;))


---------------
ma vie, mon oeuvre - HomePlayer
n°951512
nraynaud
lol
Posté le 12-01-2005 à 11:35:31  profilanswer
 

chrisbk a écrit :

tiens, en c#, si une exception est levé dans un block using(), ca appelle finalize() ?


tu veux une fessée ?

n°951514
chrisbk
-
Posté le 12-01-2005 à 11:36:28  profilanswer
 

benou a écrit :


Y a pas des cas où un release manuel des ressources est nécessaire ? (cas où le destructeur ne fait pas TOUT le boulot)  


 
faut revoir le destructeur, alors
 

benou a écrit :


(remarque : c'est moche, mais en Java tu peux aussi faire les release dans chaque catch, t'es pas obligé d'utiliser finally ;))


 
et si tu catches pas l'exception, (si tu la laisse remonter), t'as pas un leger pb ?
 
 

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Pour les artistes: quel code préférez vous?

 

Sujets relatifs
Rendre le code SQL plus lisible avec un outilPetite question sur un code pour Thumbnail
Problème avec un code PHPPortage de code de VC6 vers g++
gcc et code assembleurscript pour code source inaccessible
Code source d'un fichier PHPyatil un nom pour les menus types mappy.fr ?je cherche un code
Intégrer du code HTML dans du XML[Code C] Je recherche le code C pour récupéré le....
Plus de sujets relatifs à : Pour les artistes: quel code préférez vous?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR