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 Delphi Discussion :

[Try][Exception] dans toutes les fonctions


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Teo
    Teo est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Par défaut [Try][Exception] dans toutes les fonctions
    Bonjour

    Bonne année 2011 a tous.

    Il y a t'il de gros inconveniant a mettre dans toutes les fonctions et procedures
    d'un programme(petit ou gros), des blocs Try/Except dans un bloc Try/Finally
    genre
    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
    17
    18
    19
    20
    21
     
    Procedure truc;
    Var
      MsgExcept:String;
      ...
    Begin
      MsgExcept := '';
      Try
        Try
           code...
           ....
         Except
          MsgExcept := Exception(ExceptObject).Message;
          Exit;
         End;
      Finally
       ...
       bla bla
       ...
      end
    End;
    Est ce que cela peut beaucoup nuire a la rapidité d'une appli ?

    Mercid 'avance pour vos pistes

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 517
    Par défaut
    Bonjour,

    oui cela affecte les performances de l'application - regarde ce que dit l'aide de D7 :

    Les exceptions offrent un moyen élégant d'intercepter les erreurs d'exécution sans arrêter le programme et sans utiliser d'encombrantes instructions conditionnelles. Les exigences imposées par la sémantique de la gestion des exceptions se traduisent par une pénalisation au niveau de la taille du code ou des données et au niveau des performances à l'exécution. Il est possible de déclencher des exceptions pour presque toutes les raisons et de protéger pratiquement n'importe quel bloc de code en l'intégrant dans une instruction try...except ou try...finally, mais, en pratique, il vaut mieux réserver ces outils à des situations particulières.

    La gestion des exceptions convient aux erreurs qui ont peu de chances de se produire, mais dont les conséquences sont quasiment catastrophiques (le crash d'une application, par exemple) ; aux conditions d'erreurs difficiles à tester dans des instructions if...then ; et quand vous avez besoin de répondre aux exceptions déclenchées par le système d'exploitation ou par des routines dont le code source n'est pas sous votre contrôle. Les exceptions sont couramment utilisées pour les erreurs matérielles, de mémoire, d'entrée/sortie et du système d'exploitation.
    Bonne année 2011

    Charly

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    S'il n'y a pas d'ittération, le problème de temps est négligeable

    Par contre dans le code tel que présenté, l'utilité du bloc try..finally est discutable. Sans parler du Exit inutile !

  4. #4
    Teo
    Teo est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Par défaut
    Merci a vous 2

    @Charly910
    Je savais que j'avais lut un truc du genre, mais je savais plus où.

    @Andnotor
    C'est bon a savoir : si peu d'iterat°, pas de risque de lenteur sensible.
    En fait, j'instancie souvent des objets, avant le premier Try, d'ou le finally qui doit les detruire.
    pour le "Exit" dans l'Except, tu as raison, tel que c'est il est inutil.

    Au plaisir

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    A moins d'un Raise dans l'except et l'exception ayant déjà été gérée, il n'y a plus aucun risque. Finally est donc inutile

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    A moins d'un Raise dans l'except et l'exception ayant déjà été gérée, il n'y a plus aucun risque. Finally est donc inutile
    Ca depend le reste du code, dans le cas de libération d'objet ca arrive souvent de faire cela

    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
     
    var
      lst : TStringList;
    begin
      lst := TStringList.Create;
      try
        Try
        Except on e:Exception do
           // Gestion de l'erreur
           raise;
        end;
      finally
        lst.Free;
      end;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Eh bien... Je pense que tout ceci mériterait un véritable tutoriel. Il va falloir que je fasse un truc comme ça quand j'aurai le temps

    En voilà un (blog) qui, selon moi, ne dit pas bêtises (mais ne dit pas grand chose non plus, il manque plein de trucs) :
    http://www.juliencarnelos.com/2006/0...es-exceptions/
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Le point 1 me plaît bien.
    Le point 2 a peu d' (aucun) intérêt. C'est de la logique.
    Le point 3 est un point 2 mal réfléchi. Les deux phrases suivantes sont carrément choquantes:

    quand une exception incontrôlée survient dans le but d’assainir le programme
    et
    sur le moment effectivement si une erreur survient le client est content car son application n’affiche pas d’erreur et il peut continuer en apparence.
    Assainir le programme lorsqu'il est déjà chez le client. Well... quel manque de rigueur ! De plus,si elle est incontrôlée, comment en déterminer le type exact ? Le point 3 est le point 2 sans aucune reflexion.

    Si tu as compris ce sens en mes propos, c'est que je me suis vraiment mal exprimé
    Mon approche est très booléenne. Je peux remédier au problème en remplaçant la donnée par une valeur par défaut (point 1) ou l'exécution est interrompue (point 2). Il n'est aucunement question de laisser l'exécution se poursuivre avec une donnée incohérente. C'est la seule chose qui soit vraiment très mal

Discussions similaires

  1. [Débutant] paramètrer le nom du modèle dans toutes les fonctions
    Par nawal59 dans le forum Interfaces Graphiques
    Réponses: 23
    Dernier message: 21/10/2010, 12h09
  2. Comment MAJ le même champ présent dans toutes les tables ?
    Par PamelaGeek dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/02/2006, 14h06
  3. Comment s'y retrouver, parmis toute les fonctions ?
    Par AsmCode dans le forum OpenGL
    Réponses: 32
    Dernier message: 25/10/2005, 10h26
  4. Réponses: 3
    Dernier message: 08/08/2004, 21h35
  5. Réponses: 7
    Dernier message: 24/05/2003, 15h56

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