IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Try/Catch ou Condition ?


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 37
    Points
    37
    Par défaut Try/Catch ou Condition ?
    Bonjour,

    J'aimerais savoir ce que vous me conseillez en terme de performances. Vaut-il mieux effectuer des try/catch ou des conditions ?

    Exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    List<String> liste = new ArrayList<String>();
    if(liste.size() > 0) {
       System.out.println(liste.get(0));
    }
    if(liste.size() > 1) {
       System.out.println(liste.get(1));
    }
    if(liste.size() > 2) {
       System.out.println(liste.get(2));
    }
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    List<String> liste = new ArrayList<String>();
    try {
       System.out.println(liste.get(0));
       System.out.println(liste.get(1));
       System.out.println(liste.get(2));
       ...
    } catch(IndexOutOfBoundsException e) {}

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Sans hésiter des conditions.

    La levée d'une exception est très gourmande en ressources.

    Maintenant, dans tous les cas, ton code d'exemple est bizarrement fait, et si tu as un cas similaire dans ton programme, tu devrais peut-être plutôt revoir la conception.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Et si ta liste peut contenir 50 élément, tu vas faire 50 blocs if ?
    Ceci permet d'obtenir le même résultat, quelque soit la longueur de la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 0 ; i < liste.size() ; i++) {
         System.out.println(liste.get(i));
    }

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 37
    Points
    37
    Par défaut
    Non, oui c'était juste un exemple (bête, j'admets )

    Dans ce cas là, je ne vois plus trop quand utiliser les try/catch, car finalement on peut toujours s'en sortir avec les conditions . . .

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    bleach1234 Ton code est assez "bizarre" il faudrait savoir ce que tu veux faire précisément...

    CyberChouan Je dirais plutôt que cela dépend des cas !
    Un exception est "lourde" mais seulement lorsqu'elle est généré (et elle comporte alors un stacktrace très utile). Lorsque tout se passe bien cela n'entraine aucune perte de performance (cf sur mon blog : Exception et Performance)

    Donc on a deux cas distincts qui dépend de la source de l'erreur :
    • Soit elle peut être "fréquente" et peu arriver souvent. Dans ce cas remonter une exception peu en effet être assez lourd (surtout s'il s'agit d'un code appelé intensivement dans une boucle par exemple).
    • Soit il s'agit d'un cas qui ne devrait pas survenir pendant le déroulement du programme (ou très rarement), et dans ce cas on évite ainsi de vérifier trop souvent une condition qui doit être vrai



    CheryBen Si l'objectif est de parcourir la liste, il est quand préférable d'utiliser un Iterator qui permet le meilleurs compromis dans la plupart des cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (String str : liste) {
         System.out.println(str);
    }
    L'accès par index ne doit se faire que si on est sûr de travailler avec une ArrayList et pourrait être catastrophique en terme de performance sur une LinkedList par exemple. Si vraiment on cherche la petite bête pour une optimisation maximum, il faudrait vérifier la présence de l'interface RandomAccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (list instanceof RandomAccess) {
         // L'accès par index est plus rapide :
         for (int i = 0 ; i < liste.size() ; i++) {
              System.out.println(liste.get(i));
         }
    } else {
         // L'accès par iterator est plus rapide :
         for (String str : liste) {
              System.out.println(str);
         }
    }
    Mais bon je pense qu'il faut manipuler des listes énormes pour que cela soit différentiable...


    a++

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 37
    Points
    37
    Par défaut
    Ok, je vois un peu mieux l'utilisation des try/catch.

    Merci pour vos réponses

  7. #7
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    J'ai déjà lu ton (très bon) article, adiGuba.

    Mais en parlant de l'utilisation des Exceptions pour faire une vérification par rapport à un test "if", je pensais plutôt à des codes comme ça (que j'ai déjà vus), plus qu'à une absence volontaire de tests:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static boolean isNumeric(String chaine) {
       try {
          Integer.parseInt(chaine);
          return true;
       } catch (Exception e) {
          return false;
       }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Builder n'accepte pas try/catch/__finally
    Par Rodrigue dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/04/2005, 13h15
  2. __try __finally et try catch
    Par buzzz dans le forum C++
    Réponses: 6
    Dernier message: 19/02/2005, 15h31
  3. [debutant sous eclipse] surround with try catch
    Par Alwin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/06/2004, 20h03
  4. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo