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

Delphi Discussion :

Y a-t-il une solution pour optimiser mon petit code ?


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut Y a-t-il une solution pour optimiser mon petit code ?
    bonjour,
    suite a la réalisation d'un petit bou de code je cherche
    a l'optimiser sans le IF. mais je voi pas la !!!

    mon peiti bou de code est :
    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
     
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
    begin
    if (Length(Edit1.Text)<5) or (Length(Edit1.Text)>7) then
    begin
    //indique rien
    edit2.Text := '';
    end
    else
    begin
    edit2.Text := 'Bonne longeur, Merci';
    end;
    end;
    end;
    Le message doit s'afficher uniquement entre 5 et 7, sinon rien.

    Quelqu'un a une idée ? ou une info utile ?

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Salut

    Moi j'aurais pas écrit mieux ... as-tu des problèmes de performance ?

    JP

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    A si peut-être pour être pointilleux :
    sauver le Length(Edit1.Text) dans une variable locale pour éviter de le calculer 2 fois, mais le gain est certainement minime ...

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 564
    Points : 3 968
    Points
    3 968
    Par défaut
    Je ne vois pas comment on peut optimiser ceci et je vois encore moins ce qu'il y a à optimiser. A mon avis, tu perds ton temps

    Remarque sur le style : n'abuses pas des begin...end, c'est comme toutes les bonnes choses...

    cdlt

  5. #5
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    (optimiser) en faite supprimer le IF.
    pour éviter les "sauts" sur le if.

    j'explique pas pouquoi je v éviter le "saut" LoL

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par pierre987321
    (optimiser) pour éviter les "sauts" sur le if.
    Là c'est pas de l'optimisation ... c'est de la complexification qu'il te faut ... parce qu'un test sans if c'est plus dur

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par J-P-B
    A si peut-être pour être pointilleux :
    sauver le Length(Edit1.Text) dans une variable locale pour éviter de le calculer 2 fois, mais le gain est certainement minime ...
    de l'odre de la nanoseconde ?

  8. #8
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Citation Envoyé par e-ric
    Je ne vois pas comment on peut optimiser ceci et je vois encore moins ce qu'il y a à optimiser. A mon avis, tu perds ton temps
    Remarque sur le style : n'abuses pas des begin...end, c'est comme toutes les bonnes choses...
    cdlt
    Ah bon???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    begin
        Case length(Edit1.Text) of
        0..5 : Edit1.Text := ''; // <5
        8..255 :  Edit1.Text := 'Vous avez la bonne longueur!';//>7
        6,7 : Edit1.text :='Ca tombe mal, j''avais pas prévu celà';// Cas intermédiaire
        256 : Edit1.text := 'Vous avez dépassé mes capacités';// m'étonnerai que le TEdit laisse passer de toutes façons ;)
        end;
    end;
    cordialement,
    Hauwke

  9. #9
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    heuu un case c'est jsute une IF particulier dont la longeur du saut dependsde la valeur et non de taille fixe.
    Pour l'avoir codé dans un projet de compilo pascal generant du pseudo code ASM .... c'est pas franchement plus complexe qu'un if

    La question n'ets pas comment remplacer le IF mais plutot comment le dissimuler au millieu de code utile car des IF on en a de partout dans le code

    Ou alors .. passe directement en mode ASM .... mais comme l'a dit Paul dans un autre post, l'asm dans un prog Delphi ca saute aux pieds comme un doigt au millieu de la cuisse .....

  10. #10
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    C'est sûr que Case permet de nuancer beaucoup plus que If.

    En plus de la remarque sur le style, je m'en permettrais une autre sur la présentation et, reprenant ton exemple, ce qui suit me parait beaucoup plus clair à déchiffrer grâce à l'indentation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
      if (Length(Edit1.Text)<5) or (Length(Edit1.Text)>7) then
         edit2.Text := '';  //indique rien
                                                          else
         edit2.Text := 'Bonne longeur, Merci';
    end;

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Testé :
    var      ok : boolean;
    begin   ok:=length(Edit2.text)=6;
              case ok of
                   true : Edit3.text:='Le message doit s''afficher, "uniquement entre 5 et 7", donc à 6';
                   false: Edit3.text:=''; //<=sinon rien
              end;
    end;
    ... plus court et sans 'case' ni 'if' sais pas faire plus simple
    ... il existe peut-être une possibilité plus compliquée sans if ni case si ok pouvait être remplacé par un événement onLongueurDeEditEgale6 mais là c'est plus du brain storming qu'une suggestion ... à voir avec les fortiches du forum...

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 455
    Points : 5 900
    Points
    5 900
    Par défaut
    salut


    une variante ...pas sur quelle soit plus optimiser mais pour le fun

    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
    function verifiechaine(mots : String) : string;
    var
      Bool : boolean;
      lg : integer;
    begin
      Result := '';
      bool := length(mots) in [5,6,7];
     (* lg:= length(mots) 
       bool := (lg >= 5) and (lg <=7); *)
     if not(bool) then
        Result := 'Bonne longeur, Merci';
    end;
     
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
       edit2.Text := verifiechaine(Edit1.Text)
    end;
    PS : le code de gilbert ne tiens pas bien compte des borne

    @+ Phil

  13. #13
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 511
    Points : 2 783
    Points
    2 783
    Billets dans le blog
    10
    Par défaut
    En plus court :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function verifiechaine(mots : ShortString) : string;
    begin
      Result := '';
      if Mots[0] in [5,6,7] then
         Result := 'Bonne longueur, Merci';
    end;
     
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
       edit2.Text := verifiechaine(Edit1.Text)
    end;

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    si je peux proposer autre chose, plus rapide je sais pas, mais plus gourmand certainement :

    déclarer un tableau de 0 à 1000 (par exemple) de chaînes. Le tableau d'indices 0 à 5 est initialisé à ''.
    A l'indice 6 il est initialisé à 'Bonne longeur, Merci'. Et à partir de l'indice 7 il est initialisé à ''.

    Après il suffit d'affecter quelque chose du genre :

    Edit2.Text:=Tableau[Length(Edit1.Text)]

  15. #15
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    Sans IF ni CASE..OF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    const LeMessage:array[0..1] of string=('','Bonne longueur, Merci');
    begin
     edit2.Text := LeMessage[integer(Length(Edit1.Text) in [5..7])];
    end;


  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Bravo !

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Excuses j'ai simplifié à l'extrême dans la hâte
    Ok pour ok:= length(mots) in [5,6,7];
    Mais bigre, pas le temps de dégainer v'la deux propositions supp qui surgissent.
    Bravo Waskol pour le Sans IF ni case

  18. #18
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Et en plus ça marche, j'ai copié-collé-testé.

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 455
    Points : 5 900
    Points
    5 900
    Par défaut
    salut

    ouais pas mal
    je suis pas sur que cela soit plus optimisé en code asm mais bon le contrat est rempli

    j'oublie souvent que le boulean c'est 0 ou 1
    je l'aurait un jour ... je l'aurait

    @+ Phil

  20. #20
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    juste un mot "Merci" a vous tous

    vous avez d'énorme idéessss, c'est quand meme dingue

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Cherche une solution pour optimiser un script
    Par ssc37 dans le forum Langage
    Réponses: 3
    Dernier message: 15/07/2009, 20h13
  2. Une solution pour faire des enums dynamique ?
    Par n!co dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2006, 15h44
  3. Réponses: 6
    Dernier message: 30/06/2006, 12h04
  4. Une solution pour migrer de .NET vers MFC
    Par torNAdE dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2006, 23h23

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