1. #1
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    février 2014
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 425
    Points : 1 856
    Points
    1 856

    Par défaut Pièges et avantages de l'utilisation de With

    Bonjour à tous.

    J'ai repris une unité que j'avais codée en 2014 sous Lazarus.
    Compilation avec la version 1.6.4.
    Pas d'erreur signalée, mais comportement anormal à l'exécution !
    Comme cette unité comprend pas mal de procédures et fonctions, je passe un "certain" temps à tout vérifier...
    pour localiser, après un temps "certain", le problème que je peux résumer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.FormClick(Sender: TObject);
    var
       MyRect: TRect;
    begin
       with MyRect do
       begin
           //...
           //...
          if Right > Width then Right:= Width;
        end;
    end;
    Width est évidemment pour moi la largeur de Form1.
    Mais voilà...
    Travaillant sous Windows, le type TRect devient automatiquement un Windows.TRect (implémenté dans le fichier typshrdh.inc) qui est un record étendu avec la propriété Width !!!

    Pourquoi cette modification ?
    Si c'est encore pour la compatibilité avec Delphi, je trouve que les gens de Lazarus feraient mieux de se pencher sur des points qui sont vraiment à améliorer, notamment en graphisme !
    Et en audio ! Toujours pas de procédure multi-platform pour entendre un petit "wav" de 2 secondes ?

    Coup de gueule terminé.

    Cordialement
    Thierry

    [EDIT]
    De plus, cette propriété Width est à mon sens incorrecte : avec un R.Left = 0 et un R.Right = 9 --> Width = 9 !!!
    Entre 0 et 9, il y a bien 10 pixels, non ?

  2. #2
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 469
    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 : 2 469
    Points : 3 883
    Points
    3 883

    Par défaut

    salut

    voila une des raison pour laquelle j'utilise que très peut le with
    je préfère cent fois écrire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.FormClick(Sender: TObject);
    var
       R : TRect;
       ....
    Begin
     if R.Right > Width then 
       R.Right := Width;
    ...
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 116
    Points : 13 915
    Points
    13 915
    Billets dans le blog
    34

    Par défaut

    Citation Envoyé par ThWilliam Voir le message
    Width est évidemment pour moi la largeur de Form1.
    Mais voilà...
    Travaillant sous Windows, le type TRect devient automatiquement un Windows.TRect (implémenté dans le fichier typshrdh.inc) qui est un record étendu avec la propriété Width !!!
    With est connu depuis longtemps comme une facilité d'écriture à éviter : on gagne en vitesse d'écriture ce qu'on perd en lisibilité. Je connais de nombreux programmeurs qui s'interdisent d'utiliser with, d'autant plus que la complétion de code permet des gains de temps de frappe appréciables et une vérification en temps réel des possibilités de complétion.

    Citation Envoyé par ThWilliam Voir le message
    Si c'est encore pour la compatibilité avec Delphi, je trouve que les gens de Lazarus feraient mieux de se pencher sur des points qui sont vraiment à améliorer, notamment en graphisme !
    Et en audio ! Toujours pas de procédure multi-platform pour entendre un petit "wav" de 2 secondes ?
    Là, je suis plutôt d'accord avec toi, car vouloir travailler avec les outils offerts par Lazarus nu, c'est vraiment se créer des problèmes .

    De plus, cette propriété Width est à mon sens incorrecte : avec un R.Left = 0 et un R.Right = 9 --> Width = 9 !!!
    Entre 0 et 9, il y a bien 10 pixels, non ?
    Non, il n'y en a que 9 :

    0-1-2-3-4-5-6-7-8-9

    Les pixels s'inscrivent entre les coordonnées . D'ailleurs, ce fonctionnement est aussi celui de Delphi.

    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  4. #4
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 081
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 081
    Points : 8 334
    Points
    8 334

    Par défaut

    Citation Envoyé par gvasseur58 Voir le message
    With est connu depuis longtemps comme une facilité d'écriture à éviter : on gagne en vitesse d'écriture ce qu'on perd en lisibilité. Je connais de nombreux programmeurs qui s'interdisent d'utiliser with, d'autant plus que la complétion de code permet des gains de temps de frappe appréciables et une vérification en temps réel des possibilités de complétion.
    Ah, moi je l'aime bien, quand je veux condenser du code, et si je suis sûr qu'il n'y aura pas d'ambiguïté de noms avec les propriétés de la form, en général, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with img4Display do begin Stretch := False; Proportional := False; Transparent := False; Center := True; end;
    Tout tient sur une ligne, je sais qu'il s'agit de mes paramètres par défaut, même pas besoin de lire attentivement et hop, une ligne au lieu de quatre !


    Citation Envoyé par gvasseur58 Voir le message
    Citation Envoyé par ThWilliam Voir le message
    avec un R.Left = 0 et un R.Right = 9 --> Width = 9 !!!
    Entre 0 et 9, il y a bien 10 pixels, non ?
    Non, il n'y en a que 9 :

    0-1-2-3-4-5-6-7-8-9

    Les pixels s'inscrivent entre les coordonnées . D'ailleurs, ce fonctionnement est aussi celui de Delphi.
    Euh, tu peux développer, là ? Je ne suis pas sûr d'avoir tout bien compris : ou bien les pixels s'inscrivent entre les coordonnées qui sont donc 0 à gauche et 9 à droite et ça ne laisse plus que 8 points dispo, ou bien... je ne sais pas...

    Je viens de faire l'essai suivant : je pose un panel sur une fiche, je lui assigne Left := 0 et Width := 9, puis je demande Align := alLeft, je pose un autre panel, je lui colle simplement Align := alLeft et je regarde sa propriété Left : elle est à 9, j'en conclus que le panel précédent doit avoir un Right à 8, et donc 0 à 8 ça fait 9 pixels, j'ai mesuré en faisant une copie d'écran zoomée à 800 %, The Gimp confirme une largeur de 9 pixels pour le premier panel.

    Voilà...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre expert
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 508
    Points : 3 599
    Points
    3 599

    Par défaut

    hello,
    Citation Envoyé par ThWilliam Voir le message
    Et en audio ! Toujours pas de procédure multi-platform pour entendre un petit "wav" de 2 secondes ?
    tu peux essayer ce qui se trouve ici

    Ami calmant, J.P (sans té , bonheur et prospérité)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 436
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 436
    Points : 9 035
    Points
    9 035

    Par défaut

    Toutes les fonctions GDI n'englobent jamais les pixels droite et bas (ligne, rectangle, remplissage).

    L'erreur est de considérer qu'un pixel a une taille nulle, ce qui sous-entendrait que les données ne sont pas des coordonnées mais des indices.
    Tout devient plus clair si on considère que le pixel a une surface. Les données étant les coordonnées du coin supérieur gauche de ce pixel, un déplacement de 1 (0..1) correspond au flanc gauche du pixel suivant qui est égal au flanc droit du premier pixel ; la largeur est donc bien de 1

  7. #7
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    février 2014
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 425
    Points : 1 856
    Points
    1 856

    Par défaut

    Bonjour à vous.

    @jurassic pork :

    Merci pour le lien, mais j'avais déjà vu cette source. Ma question était : pourquoi Lazarus n'intègre pas d'office une routine de ce genre ?

    @JP et Gilles :

    Pas d'accord avec toi, Gilles, en ce qui concerne le calcul du nombre de pixels.
    0-1-2-3-4-5-6-7-8-9 : cela fait 10 pixels.
    Bien sûr, la plupart des routines graphiques "omettent" le bord droit et le bord inférieur. Il n'empêche que Width = 10.
    J'ai souvent regretté ce fonctionnement. Si je demande un rectangle(3,3,10,10) j'entends que les pixels écran soient "remplis" de 3 à 10 compris.
    Si je commande à un menuisier une table de 180 cm / 90 cm : je ne veux pas recevoir une table de 179/89

    Cordialement
    Thierry

    [EDIT]
    Andnotor, je n'ai pas vu ton post.

  8. #8
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 081
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 081
    Points : 8 334
    Points
    8 334

    Par défaut

    Voilà !
    Ça, il faudrait le graver dans le marbre, avec un peu de gras pour bien capter :
    Citation Envoyé par Andnotor Voir le message
    Toutes les fonctions GDI n'englobent jamais les pixels droite et bas (ligne, rectangle, remplissage).
    Et, partant de ça :
    Citation Envoyé par Andnotor Voir le message
    L'erreur est de considérer qu'un pixel a une taille nulle, ce qui sous-entendrait que les données ne sont pas des coordonnées mais des indices.
    si on ne veut pas d'erreur, il faut considérer que les données sont des coordonnées. Gilles a dû un peu mal s'exprimer (la chaleur, sans doute, )

    Citation Envoyé par ThWilliam Voir le message
    Si je commande à un menuisier une table de 180 cm / 90 cm : je ne veux pas recevoir une table de 179/89
    Tu noteras que si c'est toi qui traces sur ta planche ton rectangle de 180 par xxx (commençons avec une seule dimension), tu vas accrocher ton mètre-ruban sur un bord, tu vas tirer, le truc va se dérouler et quand tu vois marqué "180" tu tires un coup de crayon.
    OK. Le premier "pixel" va du crochet du mètre-ruban (= 0 cm) au trait "1 cm", le deuxième va du trait "1 cm", le parcourt et s'arrête au trait "2 cm" et ainsi de suite jusqu'au trait "180 cm" que tu ne parcours pas !, et tu auras bien ta quantité de 180 cm.

    C'est comme les âges et les dates d'anniv' ! Si tu est né le 1er janvier 1971, le 1er janvier 72 tu as déjà vécu 1 an et tu entames ta seconde année.
    Genre fête avec les copains, "ouais 'jourd'hui c'est mon anniv'
    - quel âge ça te fait ?
    - ben j'ai (déjà vécu) 1 an tout rond. "

    Tu vois le truc ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 489
    Points : 3 618
    Points
    3 618

    Par défaut

    Salut

    J'utilise le with de temps à autre mais c'est vrai qu'il faut être vigilant, mais il me semble que cela permet d'apporter des optimisations par le compilateur (enfin sous Delphi si je me souviens bien).

    C'est une instruction qui peut avoir des effets sournois y compris sous un aspect temporel : code qui marchait il y a des années et qui ne marche plus car l'évolution des classes fait naître une ambigüité. Gare à la prochaine compilation !

    Plus marrant encore : la composition de with (with imbriqués) qui peut s'abréger en une seule instruction avec la liste des arguments successifs séparés par des virgules, là cela devient de la perversité car l'ordre des arguments n'est pas neutre selon les situations.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  10. #10
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 116
    Points : 13 915
    Points
    13 915
    Billets dans le blog
    34

    Par défaut

    Citation Envoyé par ThWilliam Voir le message
    Pas d'accord avec toi, Gilles, en ce qui concerne le calcul du nombre de pixels.
    0-1-2-3-4-5-6-7-8-9 : cela fait 10 pixels.
    Non . Les pixels sont les tirets, pas les chiffres. Et il y en a bien 9, pas 10. C'est ce que j'ai sans doute mal expliqué en précisant que les pixels s'inscrivaient entre les coordonnées .

    Je pars de 0 et j'ai un pixel qui va jusqu'à 1. Il ne s'agit donc pas d'une aberration. A noter que ce genre de précision est extrêmement utile lorsqu'on manipule, comme avec la bibliothèque BGRABitmap, des coordonnées non entières (single en général). En effet, au bout du compte, ce seront bien des pixels entiers qui seront affectés et non des portions de pixels.

    EDIT : Andnotor a raison ! Et Jipété aussi : si on ne veut pas d'erreur, il faut considérer que les données sont des coordonnées. Gilles a dû un peu mal s'exprimer (la chaleur, sans doute, )

    @e-ric : avec Lazarus, d'après ce que j'en sais, il n'y a aucune optimisation du code compilé grâce à l'emploi de with qui n'est qu'une facilité d'écriture. Pour être tout à fait honnête, je l'emploie, mais il m'est arrivé, comme tout le monde, dans des projets complexes, de buter sur une mauvaise interprétation du code à cause de lui. Je crois qu'il vaut mieux l'éviter lorsque l'identificateur peut renvoyer à des tas de possibilités (comme Left, Right, Canvas...). En revanche, avec un identificateur comme SiJAiUnAutreIdentificateurCOmmeCeluiJeNAiPAsDeChance, aucun problème a priori ou alors on est vivcieux dans le choix de ses identificateurs .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  11. #11
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 489
    Points : 3 618
    Points
    3 618

    Par défaut

    Bonsoir à tous

    En général, j'utilise With dans des cas simples comme le célébrissime (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       with (sender as TComboBox) do
       ...
    Ou dans du code très simple (c'est plus un petit confort qu'autre chose) mais comportant plusieurs instructions concernant la cible, pour une instruction ce n'est pas utile.
    Je n'ai, en fait, pas trop de réticence à l'utiliser selon mon évaluation du risque de problème immédiat ou à venir (vive l'arbitraire !)

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 810
    Points : 21 784
    Points
    21 784

    Par défaut

    with est également intéressant pour éviter de re-calculer une information

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    with MyObject.List[MyObject.ItemIndex].SubProperty.Lines[x] do 
      a := b + 1;
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     MyObject.List[MyObject.ItemIndex].SubProperty.Lines[x].a := MyObject.List[MyObject.ItemIndex].SubProperty.Lines[x].b + 1;
    ce qui non seulement est long en texte, mais long à calculer car c'est fait deux fois

    on peut cependant écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
      line: TLine;
    begin
      line := MyObject.List[MyObject.ItemIndex].SubProperty.Lines[x];
      line.a := line.b + 1;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  13. #13
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 081
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 081
    Points : 8 334
    Points
    8 334

    Par défaut

    Bonjour,

    Rions un peu avec le with et les pièges qui nous pendent au nez :
    Nom : with_gag.jpg
Affichages : 66
Taille : 57,7 Ko
    508 x 381, il s'agit des dimensions de la... fiche !

    Fiche qui supporte une StringGrid "sg" et un objet à moi regroupant des infos lues dans le BitmapInfoHeader de fichiers .bmp, et affichées ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TInfosForm.LogDatas(var jpb: TjpBitmap);
    begin
      with jpb do
        with sg do begin
          Cells[ColCount-1, 1] := inttostr(DatasSizeT);
          Cells[ColCount-1, 2] := inttostr(DatasSizeF);
          Cells[ColCount-1, 3] := inttostr(Height);
          Cells[ColCount-1, 4] := inttostr(Width);
    Il va sans dire qu'en voyant ces deux lignes de données identiques quelque soit le fichier, de très gros (400x240) à tout pitchoun (3x1), me suis dit in petto qu'il y avait un truc qui ne tournait pas rond !

    La soluce, fastoche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      with jpb do
        with sg do begin
          Cells[ColCount-1, 1] := inttostr(DatasSizeT);
          Cells[ColCount-1, 2] := inttostr(DatasSizeF);
          Cells[ColCount-1, 3] := inttostr(jpb.Height);
          Cells[ColCount-1, 4] := inttostr(jpb.Width);
    Bon week-end,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #14
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 489
    Points : 3 618
    Points
    3 618

    Par défaut

    Salut

    Pour rebondir sur les propos de Paul, effectivement le with est très intéressant dans le cas qu'il évoque,mais le problème de l'ambiguïté des identificateurs homonymes demeure, une clause de renommage serait fort bienvenue, en s'inspirant de Python bien que l'instruction ne soit pas rigoureusement identique sémantiquement, on pourrait écrire sans trop faire d'entorse au Pascal (avis perso) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    with MyObject.List[MyObject.ItemIndex].SubProperty.Lines[x] as toto do 
      toto.a := toto.b + 1;
    même si cela peut être remplacé par l'affectation d'une variable locale ad hoc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      toto := MyObject.List[MyObject.ItemIndex].SubProperty.Lines[x];
      toto.a := toto.b + 1;
    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. Quels sont les avantages de l'utilisation d'interfaces ?
    Par Blowdi dans le forum Design Patterns
    Réponses: 17
    Dernier message: 05/11/2009, 23h28
  2. Avantages de l'utilisation de template
    Par DjChat dans le forum Smarty
    Réponses: 12
    Dernier message: 22/10/2009, 21h06
  3. utilisation de WITH pour nommer un résultat
    Par adidmamah dans le forum Requêtes
    Réponses: 1
    Dernier message: 01/01/2009, 17h45
  4. utilisation de with
    Par Pol63 dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 04/11/2008, 01h38
  5. [2007]Utilisation de WITH OWNEACCESS OPTION
    Par tAKAmAkA dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/12/2007, 04h14

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