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 :

Problème avec Helper : erreur "Illegal qualifier" [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Points : 158
    Points
    158
    Par défaut Problème avec Helper : erreur "Illegal qualifier"
    Bonjour,

    Je suis en train de me remettre au pascal avec Lazarus et le livre Object Pascal Handbook, j'en suis au code qui utilise les helpers et j'essaie donc le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Program Project1;
     
    {$modeswitch typehelpers}
    var
      N:Integer;
     
    Begin
      N:=10;
      WriteLn(N.ToString);
      readln;
    End.
    Et j'obtiens le message d'erreur suivant à la compilation:
    Compilation du projet - Cible : C:\Users\JENRAM~1\AppData\Local\Temp\project1.exe : Code de sortie 1 - Erreurs : 1
    project1.lpr(9,13) Error: Illegal qualifier
    J'ai été lire le post suivant :

    unite-va-simplifier-vie-typeshelpers

    Que voyez-vous d'incorrect? Je me doutais au départ qu'il y aurait un problème vu que lorsque je tapais le point l'éditeur ne me proposait aucune complétion.

    Merci d'avance.

  2. #2
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Points : 158
    Points
    158
    Par défaut
    Rebonjour,

    J'ai vu mon erreur : j'ai oublié d'utilisé sysUtils!


  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par jenramac Voir le message
    ... ...
    Je ne vois absolument pas l'avantage d'utiliser les "helpers" dans ce cas car, dans l'unité "SysUtils" la fonction "ToString" fait appel à la fonction "IntToStr".

    L'exécution sera plus rapide en écrivant directement :

    Ce qui qui évite un appel supplémentaire de fonction.

    Cordialement.

    Pierre

  4. #4
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Je ne vois absolument pas l'avantage d'utiliser les "helpers" dans ce cas car, dans l'unité "SysUtils" la fonction "ToString" fait appel à la fonction "IntToStr".

    L'exécution sera plus rapide en écrivant directement :

    Ce qui qui évite un appel supplémentaire de fonction.

    Cordialement.

    Pierre
    Bonjour,

    Ce n'est pas pour utilisation mais simplement pour ajouter à ma besace et effectivement cela est moins efficace pour ce cas.

    Bonne journée.

  5. #5
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par jenramac Voir le message
    Bonjour,

    Ce n'est pas pour utilisation mais simplement pour ajouter à ma besace et effectivement cela est moins efficace pour ce cas.

    Bonne journée.
    C'est une bonne pratique. Pour autant, il serait intéressant d'analyser l'utilité d'un "helper" à chaque fois qu'on veut l'utiliser. Je suis surpris de voir intégré à une unité de Lazarus des "helpers" dont le seul but est de renommer une fonction, mais pour cela devoir passer par une fonction supplémentaire !!!

    Cordialement.

    Pierre

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Concernant cet intérêt, un argument qui m'avait été exposé dans la discussion citée résidait dans l'aide apportée par la complétion de code et l'inutilité de retenir un nom de fonction pas toujours évident (compliqué à retenir, ou dont on ne souvient jamais du sens, style ReplaceString, ReplaceStr, StrReplace ou StringReplace, etc.).
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Ce qui qui évite un appel supplémentaire de fonction.
    A contrôler sous Lazarus mais sous Delphi ces méthodes sont INLINE, il n'y a pas d'appel supplémentaire.

  8. #8
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    A contrôler sous Lazarus mais sous Delphi ces méthodes sont INLINE, il n'y a pas d'appel supplémentaire.
    Bonjour,

    Oui, elle est mise inline :

    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
    TIntegerHelper = Type Helper for Integer { for LongInt Type too }
      public
        const
          MaxValue = 2147483647;
          MinValue = -2147483648;
      Public
        Class Function Size: Integer; inline; static;
        Class Function ToString(const AValue: Integer): string; overload; inline; static;
        Class Function Parse(const AString: string): Integer; inline; static;
        Class Function TryParse(const AString: string; out AValue: Integer): Boolean; inline; static;
      Public
        Function ToBoolean: Boolean; inline;
        Function ToDouble: Double; inline;
        Function ToExtended: Extended; inline;
        Function ToHexString(const AMinDigits: Integer): string; overload; inline;
        Function ToHexString: string; overload; inline;
        Function ToSingle: Single; inline;
        Function ToString: string; overload; inline;
      end;
    Comme les autres d'ailleurs.

  9. #9
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    A contrôler sous Lazarus mais sous Delphi ces méthodes sont INLINE, il n'y a pas d'appel supplémentaire.
    C'est effectivement le cas avec Lazarus. Donc, pas d'influence sur le temps d'exécution.

    Voir quand même cet article.

    Cordialement.

    Pierre

  10. #10
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    C'est une bonne pratique. Pour autant, il serait intéressant d'analyser l'utilité d'un "helper" à chaque fois qu'on veut l'utiliser. Je suis surpris de voir intégré à une unité de Lazarus des "helpers" dont le seul but est de renommer une fonction, mais pour cela devoir passer par une fonction supplémentaire !!!

    Cordialement.

    Pierre
    Salut pour ma par maintenant j'ai du mal à me séparer de mon unité donnée en lien (que j'ai fait évoluer depuis). Je gagne un temps fou lors du codage (au lieu de me taper des inttostr et autre strto...) tu tapes le point et To et hop plus qu'a appuyer sur entrée.
    En plus l'avantage c'est la complétion du code, si tu ne te souvient plus du nom d'une fonction et dans quelle unité. Et comme le dis AndNotOr avec la déclaration INLINE c'est du tout cuit. Et même si si c'est un sous appel, la perte de performance sur ce genre de manipulation est minime voir nulle, le compilo fait plutôt bien son travail.

    A+

    Jérôme
    • "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

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

Discussions similaires

  1. Problème avec une erreur de type [DCC Erreur]
    Par colorid dans le forum Langage
    Réponses: 5
    Dernier message: 24/09/2007, 20h04
  2. [vba] Problème avec MoveNext - Erreur de collection ?
    Par ancel17 dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/05/2007, 17h17
  3. Problème avec une erreur d'exception inconnue
    Par yoyo72 dans le forum Delphi
    Réponses: 5
    Dernier message: 09/08/2006, 11h52
  4. Problème avec l'erreur 3464 sur access
    Par somalien10 dans le forum Access
    Réponses: 10
    Dernier message: 16/05/2006, 09h30
  5. Problème avec sizeof(...) : erreur de taille
    Par Invité dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 06/05/2006, 12h53

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