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 :

Précision sur le try/catch


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut Précision sur le try/catch
    Bonjour,

    Souvent dans mon code je déclenche des exceptions sur certains cas que je pourrait gerer simplement à l'aide d'un if else, et je ne sais pas si c'est réellement avisé.

    Prenons l'exemple d'un buffer dans lequel chaque ligne doit etre découpée suivant les '\t' et stockée. On ignorera chaque ligne malformée.

    J'aimerais savoir, entre ces deux écritures, laquelle est la mieux, et pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    while ( (line = buf.readline()) != null)
    {
       tab = line.split('\t');
       if (tab.length == 4)
       {
          // on vérifie que tab[0] et tab[2] sont des entiers
          if (tab[0].matches("\\d+") && tab[2].matches("\\d+"))
          {
              a = Integer.parseInt(tab[0]);
              b = tab[1];
              c = Integer.parseInt(tab[2]);
              d = tab[3];
          }
       }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    while ( (line = buf.readline()) != null)
    {
       tab = line.split('\t');
       try
       {
          a = Integer.parseInt(tab[0]);
          b = tab[1];
          c = Integer.parseInt(tab[2]);
          d = tab[3];
       }
       catch (Exception e) {}
    }
    voila, j'espere avoir été clair

    merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    C'est une tautologie, mais les exceptions, c'est fait pour des cas exceptionnels. Qui merite donc un traitement particulier (comme avertir l'utilisateur que son fichier est corrumpu).

    Attraper une exception pour finalement l'ignorer, c'est une tres mauvaise habitude.

    D'ailleurs, dans le cas que tu presentes, tu attrapes n'importe quel type d'exception, et tu peux donc te retrouver à ignorer des exceptions importantes (une OutOfMemoryException par exemple)

    Si les lignes peuvent ne pas respecter le format, vaut mieux la version avec des if.

    L'utilisation des if doit être un peu plus rapide.

  3. #3
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Je ne suis pas sûr que le coté exceptionnel (dans le sens rare) soit la meilleure approche. Pour moi, c'est une question de philosophie, de savoir ce qui est le cas imprévu.

    Reprenons ton exemple avec une ligne formattée.

    • On considère qu'elle est formattée, et au cours du traitement on s'aperçoit qu'elle est mal formatée exception.
    • On ne sait pas si elle est bien formattée, et on fait une méthode pour le tester pas d'exception, on renvoie un booléen.
    • Des fois pour la sécurité on fait tout en un : une méthode pour vérifier qu'un utilisateur est autorisé et qui renvoie une exception sinon.

Discussions similaires

  1. Eclaircissements sur le try / catch
    Par ZeGuizmo dans le forum Langage
    Réponses: 10
    Dernier message: 17/10/2009, 23h05
  2. Question de syntaxe sur try catch
    Par snopims dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/09/2009, 05h13
  3. Interrogation sur : Try.Catch.Finally
    Par Seth77 dans le forum C#
    Réponses: 7
    Dernier message: 16/09/2008, 11h22
  4. Besoin d'une précision pour try/catch, svp
    Par hallek60 dans le forum C++
    Réponses: 9
    Dernier message: 05/01/2006, 21h15
  5. Erreur de runtime sur un try ... catch
    Par Floréal dans le forum C++
    Réponses: 14
    Dernier message: 09/09/2005, 19h15

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