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

Lazarus Pascal Discussion :

Éditeur : pourquoi Lazarus ne veut-il pas garder certaines procédures repliées ? [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut Éditeur : pourquoi Lazarus ne veut-il pas garder certaines procédures repliées ?
    Bonjour la communauté !

    Dans les deux fonctions que je montre ici, (gettel) reste replié mais (qetteh) non, et toutes les fonctions après (getteh) se déplient aussi. Pourtant ces deux fonctions sont identiques sauf pour les variables qui sont opposées mais du même genre.

    J'avais réussi replier tout ce que je voulais replier mais le problème est revenu et maintenant je n'arrive plus à le faire.
    Alors j'espère que quelqu'un saura pourquoi mon code se déplie tout le temps.

    Fernand, merci !

    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
     
    function gettel:boolean; //Determine si le roi Projechec peut prendre un pion
           var dp:integer;
          begin
            for dp := 0 to 7 do
            if (poh[dp,1] <> fin) and (sqah[poh[dp,1]] = vid) and ((pohh[poh[dp,1]] and borl <> vid) or (board[poh[dp,1]] and evdh[dpl,dph,hum] = vid))
            then begin
              if getouh(poh[dp,1])
              then begin result := true;exit; end;end;
            result := false;
          end;
          function getteh:boolean; //Determine si le roi humain peut prendre un pion
           var dp:integer;
          begin
            for dp := 0 to 7 do
            if (pol[dp,1] <> vid) and (sqal[pol[dp,1]] = vid) and ((poll[pol[dp,1]] and borh <> vid) or (board[pol[dp,1]] and evdl[dpl,dph,log] = vid))
            then begin
              if getoul(pol[dp,1])
              then begin result := true;exit; end;end;
            result := false;
          end;

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 102
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 102
    Par défaut
    Yep !

    Version de Lazarus...

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 602
    Par défaut Trop de repliements tue le repliement ;-)
    Bonjour,

    Je ne sais pas si c'est le cas ici, mais quelquefois le marqueur de début de bloc de repliement concerne non pas un seul mais plusieurs blocs. Alors quand on déplie ou replie, on a souvent des surprises. La seule solution dans ce cas est de paramétrer moins de critères de blocs. Cela ne fait pas disparaître le phénomène mais en raréfie l'apparition.

    A mon sens, il devrait y avoir un critère de taille (nombre de lignes concernés) qui évite la création d'une zone de repliage pour moins de n lignes (par exemple 4 ou 5). Cela limiterait la profusion de ces blocs et leurs enchevêtrement potentiel.

    Salutation

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut
    Bonjour !

    Ma version de Lazarus oui c'est important, c'est 2.2.0.

    Guesset
    A mon sens, il devrait y avoir un critère de taille (nombre de lignes concernés) qui évite la création d'une zone de repliage pour moins de n lignes (par exemple 4 ou 5). Cela limiterait la profusion de ces blocs et leurs enchevêtrement potentiel.
    En réalité les deux seuls objets Pascal cochés dans (outils > éditeur > repliage) sont les procédures et les classes/objets.
    Alors je peux juste replier les procédures entières et je ne fais jamais d'imbrication.

    Je sais par expérience que sous les dernières versions de Delphi, si tu écris une procédure au-dessus du code replié, tu dois mettre les (End) avant les (Begin) sinon le code se dépliera. Cela est dû au fait que le compilateur Delphi t'indique tes erreurs quant tu écris ton code.

    Je ne sais pas si Lazarus peut lui aussi nous indiquer nos erreurs quand on code et je vais ouvrir une discussion à ce sujet plus tard.
    Pour l'instant j'essaie seulement de comprendre le fait que mon code se déplie.

    Fernand, Merci !

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Hello, peut-être juste parce que tu n'a pas de ligne vide entre tes deux fonctions et que ton indentation est ouha vachement grande ! (due au copier-coller peut-être). Néanmoins dans les options de l'éditeur il doit y a voir une option, je ne sais plus trop où, pour convertir les tabulations en espaces.

    Ou bien c'est peut-être dû à ta façon d'écrire, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if getouh(poh[dp,1])
              then begin result := true;exit; end;end;
    Pourquoi mettre le then du if sur une nouvelle ligne ? Pourquoi mettre le deuxième end du if précédent sur la même ligne ?
    Il faudrait respecter un peu mieux les conventions d'écriture. Même pour toi, tu y verras plus clair dans ton code.

    Sinon c'est à cause de ta boucle for qui n'a pas de begin...end, ça peut mettre le bazar. Je pense que le souci vient de là.

    Voilà un code qui correspondrait au standard. Il est plus aéré et beaucoup plus lisible. C'est bien plus facile à déchiffrer et voir ce que fait ta méthode :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    //Determine si le roi Projechec peut prendre un pion
    function gettel:boolean; 
    var 
      dp:integer;
    begin
      result := false;
      for dp := 0 to 7 do
      begin
        if (poh[dp,1] <> fin) and (sqah[poh[dp,1]] = vid) and ((pohh[poh[dp,1]] and borl <> vid) or (board[poh[dp,1]] and evdh[dpl,dph,hum] = vid)) then 
        begin
          if getouh(poh[dp,1]) then 
          begin 
            result := true;
            exit; 
          end;
        end;
      end;  
    end;
     
    //Determine si le roi humain peut prendre un pion
    function getteh:boolean; 
    var 
      dp:integer;
    begin
      result := false;
      for dp := 0 to 7 do
      begin
        if (pol[dp,1] <> vid) and (sqal[pol[dp,1]] = vid) and ((poll[pol[dp,1]] and borh <> vid) or (board[pol[dp,1]] and evdl[dpl,dph,log] = vid)) then 
        begin
          if getoul(pol[dp,1]) then 
          begin 
            result := true;
            exit; 
          end;
        end;
      end; 
    end;
    PS : Tu as un outil dans Lazarus de reformatage de code à configurer que tu peux lancer une fois.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 102
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 102
    Par défaut
    Bonjour,

    Citation Envoyé par fernet Voir le message
    dans (outils > éditeur > repliage)
    Dans outils > options > éditeur > repliage dans ma 2.0.12 (et les précédentes).

    Chez moi tout est coché, même un truc grisé à droite que je ne peux pas changer ! :

    Nom : repliage.png
Affichages : 249
Taille : 36,1 Ko


    Citation Envoyé par fernet Voir le message
    Ma version de Lazarus oui c'est important, c'est 2.2.0.
    Oui, car j'ai longtemps pensé à un problème de code mal fini et j'attendais une màj. Mais là, c'est presque la dernière, alors bon, ça doit être autre chose, et je viens de me rendre compte il y a 5 minutes que pour que le repliage fonctionne et tienne dans le temps, il fallait cliquer sur le bouton des deux diskettes l'une sur l'autre pour enregistrer le projet : il semblerait que l'enregistrement avant compil ne soit pas suffisant.

    Testé avec un gros projet et un tout simple, ça fonctionne. Pour le moment...

  7. #7
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 602
    Par défaut Court
    Bonjour

    J'aime bien les blocs mais quand il y en a trop je débloque (ouais, je sais c'est nul, mais j'aime ça ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Determine si le roi humain peut prendre un pion
    function getteh:boolean; 
    var 
       dp : integer;
    begin
       for dp := 0 to 7 do
          if (pol[dp,1] <> vid) and (sqal[pol[dp,1]] = vid) 
          and ((poll[pol[dp,1]] and borh <> vid) or (board[pol[dp,1]] and evdl[dpl,dph,log] = vid)) 
          and getoul(pol[dp,1]) then exit(true); 
       result := false;
    end;
    Utiliser exit avec l'argument de retour est assez sympathique.

    Avec le calcul optimisé des expressions booléennes, il n'y a aucun danger à intégrer le dernier if dans l'expression générale (à la fin).

    Vu la taille résultante du code , déplié ou pas ne changera pas grand chose à la lisibilité

    Salutations

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut
    Bonjour!
    J'ai réussi à replier mes sections de codes. Il s'emblerait que l'éditeur n'accepte pas qu'une procédure
    soit pas replié entre deux sections replié. J'ai un peut de misère à le croire. Peut être que c'est un bogue
    et j'ai trouvé ceci (SynEdit: correction de l’état de sauvegarde / chargement du pliage.) dans le correctif
    de Lazarus 2.2.2 écrit par (Martin il y a 2 mois).
    Guesset
    Utiliser exit avec l'argument de retour est assez sympathique.
    Exit(true) intéressant! Je vais faire des testes dans mon jeu d'échec pour voir si ça améliore l'exécution
    de mon programme.

    BeanzMaster
    Voilà un code qui correspondrait au standard. Il est plus aéré et beaucoup plus lisible. C'est bien plus facile à déchiffrer et voir ce que fait ta méthode :
    Je doit avouer que c'est exactement comme ça que l'on m'a appris à coder. Cependant en ce temps
    avant Turbo Pascal les éditeurs avait peut d'espace et je devais constamment réduire mes lignes de
    code pour pouvoir continuer à programmer.

    Fernand, merci!

  9. #9
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 602
    Par défaut Petit code
    Bonjour Fernand,

    Citation Envoyé par fernet Voir le message
    ...Exit(true) intéressant! Je vais faire des tests dans mon jeu d'échec pour voir si ça améliore l'exécution de mon programme...
    Cela n'a pas d'impact sur les performances mais permet d'avoir un code plus concis.

    Salut

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

Discussions similaires

  1. Problème de session qui ne veut pas garder sa valeur
    Par pierrot10 dans le forum Langage
    Réponses: 10
    Dernier message: 23/06/2011, 12h35
  2. [Référencement] Pourquoi Google ne me référence pas ?
    Par Gamleur84 dans le forum Référencement
    Réponses: 5
    Dernier message: 21/11/2005, 13h49
  3. [BCB5][FB1.5]Pourquoi cette commande ne fonctionne pas ?
    Par Sitting Bull dans le forum Débuter
    Réponses: 1
    Dernier message: 17/11/2004, 16h27
  4. Pourquoi ce trigger ne marche pas ??
    Par Le Basque dans le forum Développement
    Réponses: 4
    Dernier message: 20/09/2004, 15h46
  5. [JLabel][HTML]pourquoi mes images s'affiche pas?!
    Par La Truffe dans le forum Composants
    Réponses: 8
    Dernier message: 29/04/2004, 11h23

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