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 :

Une unité qui va vous simplifier la vie : TypesHelpers


Sujet :

Lazarus Pascal

  1. #1
    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 Une unité qui va vous simplifier la vie : TypesHelpers
    Bonjour à tous,

    Il y a quelque temps, pour des besoins personnels, j'ai installé Microsoft Visual Studio Community 2017

    En refaisant mes premier pas sous cet EDI, j'ai remarqué une petite chose plutôt pas mal dont je ne me souvenais plus.

    En C# (je ne sais plus si c'est valable en C++) pour les Type Integer, float etc., nous disposons de fonctions qui sont attachées.
    Avec Lazarus et FPC ces fonctions sont limitées. Et il faut passer par le nom du type de la variable pour y avoir accès. Je vous ai fait quelques petites captures :

    Nom : lazhelperscreen01.jpg
Affichages : 498
Taille : 48,1 Ko

    Comme on peut le voir et je le disais, le nombre de fonctions est limité et ces fonctions ne sont pas vraiment utiles dans la pratique.

    Sous Visual Studio certaine fonctions sont également attachées aux variables (en plus du type lui même) :

    Nom : vsscreen01.jpg
Affichages : 471
Taille : 23,1 Ko

    Mais sous Lazarus, on se prend une grosse erreur :

    Nom : lazhelperscreen02.jpg
Affichages : 695
Taille : 19,2 Ko

    C'est alors que je me suis demandé s'il serait possible d'obtenir le même comportement avec Lazarus en utilisant des Helpers sur des types de variables comme le Char, Byte, Integer, Single, Double, String....
    Et la réponse est oui ! Il y a juste 2 conditions : l'unité doit être compilée en mode Delphi et il faut utiliser les même noms d'Helpers que ceux déjà définis par FPC.

    Je vous propose donc une petite unité basée sur ces fameux Helpers

    Les avantages sont clairs : plus besoin de se souvenir du nom de toutes les fonctions pour réaliser telle ou telle chose. Les fonctions peuvent être chainées. Résultat on code plus rapidement.

    Nom : 2018-04-14_022554.jpg
Affichages : 454
Taille : 108,1 Ko

    J'ai réalisé une petite démo qui vous montre tout ça :

    Nom : 2018-04-14_021441.jpg
Affichages : 496
Taille : 106,1 Ko

    J'ai testé sous Windows et Linux, tout fonctionne.

    Petite information concernant les chaines de caractères String j'ai utilisé les fonctions présentes dans l'unité LazUTF8 ce qui permet de solutionner pas mal de petits problèmes liés à ce format de chaine

    Il manque surement encore quelques fonctions. Et il manque des "helpers" pour gérer les types Int64, Extended. Mais pour l'instant cette unité me suffit (presque) en l'état.
    Je vais ajouter encore quelques fonctions et améliorer les commentaires.

    Si jamais, pour vos propre besoins, rien ne vous empêche de rajouter vos propres fonctions

    J'aimerais poster ce bout de code dans les sources Lazarus.

    Mais avant, J'aurais souhaité avoir vos avis, impressions et suggestions.

    Vous trouverez cette petite merveille en pièce jointe : TypesHelpers.zip

    Merci d'avance pour vos tests et retours.

    A+

    PS : Désolé d'avance j'ai tout commenté en Anglais "basique". Si vous ne comprenez pas, un petit coup de google translate devrait faire l'affaire (je vous conseille ce petit addons pour vos navigateur, qui est très pratique)
    • "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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 124
    Par défaut
    Salut,
    Citation Envoyé par BeanzMaster Voir le message
    Mais sous Lazarus, on se prend une grosse erreur

    Nom : lazhelperscreen02.jpg
Affichages : 695
Taille : 19,2 Ko
    As-tu remarqué que le message d'erreur fait référence à la ligne 34, c-à-d dans la déclaration des variables, là où au bout de la ligne précédente tu as oublié le ";" comme te le rappelle le message ?

    Je n'ai pas regardé le reste, c'est week-end je ne suis pas bien réveillé,

  3. #3
    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
    Citation Envoyé par Jipété Voir le message
    Salut,

    As-tu remarqué que le message d'erreur fait référence à la ligne 34, c-à-d dans la déclaration des variables, là où au bout de la ligne précédente tu as oublié le ";" comme te le rappelle le message ?

    Je n'ai pas regardé le reste, c'est week-end je ne suis pas bien réveillé,
    Salut Oups, non, j'avais pas vu il était près de 2h30, un peu fatigué à cette heure

    De toute façon, cela ne change pas grand chose, la liste n'est pas exhaustive

    Nom : lazhelperscreen03.jpg
Affichages : 459
Taille : 48,9 Ko

    Du coup je pourrais virer 2/3 fonctions cela ne sert à rien d'avoir des duplicatas

    Merci

    EDIT :
    Je viens de regarder pour les String le helper original est fait pour les AnsiString et dans mon unité j'utilise LazUTF8. Et pour le coup, vu que je surcharge les helpers initiaux ce sont mes helpers qui sont pris en comptes et plus les originaux, les 2 ne s'additionnent pas. Dommage.
    Il faudra que je teste pour voir les différences de résultats (surtout pour les string)
    • "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

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Intéressant

    Y a-t-il pour autant toujours un avantage par rapport à des fonctions surchargées suivant le type de paramètres ?

    z := x.Min(y) vaut-il mieux que z := Min(x, y) ?
    s := i.ToString vaut-il mieux que s := ToString(i) ?

    En terme de lisibilité, je pense que ça dépend des cas, voire des sensibilités, et qu'il est du coup très bien de disposer des deux !
    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 !

  5. #5
    Membre émérite

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Par défaut
    Citation Envoyé par BeanzMaster
    Et la réponse est oui ! Il y a juste 2 conditions : l'unité doit être compilée en mode Delphi et il faut utiliser les même noms d'Helpers que ceux déjà définis par FPC.
    Pour autant que j'ai pu constater, ce n'est pas le mode Delphi en lui-même qui est requis mais simplement la directive {$modeswitch typehelpers}, (le mode Delphi se contente de pré-sélectionner cette option par défaut).

    En ce qui concerne les noms d'Helpers (que je traduit par "Assistants" en français) je ne pense pas que le compilateur FPC en définisse par lui-même, par contre il peut y en avoir dans les bibliothèques d'exécution ou de composants et c'est comme pour tous les identifiants, il faut se méfier des collisions ou redéfinitions intempestives.


    Citation Envoyé par tourlourou
    Y a-t-il pour autant toujours un avantage par rapport à des fonctions surchargées suivant le type de paramètres ?

    z := x.Min(y) vaut-il mieux que z := Min(x, y) ?
    s := i.ToString vaut-il mieux que s := ToString(i) ?
    L'avantage avec un EDI comme Lazarus c'est que l'on bénéficie de la complétion de code pour sélectionner l'assistant qui va bien : on tape un point à la suite de l'identifiant de variable et on choisit dans la liste. Avec les routines classiques on doit connaître les noms de fonctions par cœur.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par DomDA91
    on bénéficie de la complétion de code pour sélectionner l'assistant
    C'est tout à fait vrai et constitue bien un avantage.

    NB : pour les objets qui disposent de nombreuses propriétés et méthodes, on a parfois plusieurs pages à parcourir dans le sélecteur si on n'a pas la première lettre pour restreindre les possibilités de complétion...
    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
    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
    Bonjour

    Citation Envoyé par tourlourou Voir le message
    Intéressant

    Y a-t-il pour autant toujours un avantage par rapport à des fonctions surchargées suivant le type de paramètres ?

    z := x.Min(y) vaut-il mieux que z := Min(x, y) ?
    s := i.ToString vaut-il mieux que s := ToString(i) ?

    En terme de lisibilité, je pense que ça dépend des cas, voire des sensibilités, et qu'il est du coup très bien de disposer des deux !
    Citation Envoyé par DomDA91 Voir le message
    L'avantage avec un EDI comme Lazarus c'est que l'on bénéficie de la complétion de code pour sélectionner l'assistant qui va bien : on tape un point à la suite de l'identifiant de variable et on choisit dans la liste. Avec les routines classiques on doit connaître les noms de fonctions par cœur.
    C'est tout à fait ça DomDA91,

    En plus, te souviens tu dans quelle unité est déclaré la fonction Min ?. C'est pour cela que c'est avantageux. On bénéficie de fonctions qui sont regroupées par ci par là dans diverses unités.
    les fonctions "Min" et "Max" sont présentes dans l'unité Math par exemple. Il faut le savoir et s'en souvenir.

    Citation Envoyé par DomDA91 Voir le message
    Pour autant que j'ai pu constater, ce n'est pas le mode Delphi en lui-même qui est requis mais simplement la directive {$modeswitch typehelpers}, (le mode Delphi se contente de pré-sélectionner cette option par défaut).
    Merci pour {$modeswitch typehelpers} je savais pas que cette directive existait

    Citation Envoyé par DomDA91 Voir le message
    En ce qui concerne les noms d'Helpers (que je traduit par "Assistants" en français) je ne pense pas que le compilateur FPC en définisse par lui-même, par contre il peut y en avoir dans les bibliothèques d'exécution ou de composants et c'est comme pour tous les identifiants, il faut se méfier des collisions ou redéfinitions intempestives.
    Les assistants originaux sont présent dans le fichier "fpc/3.0.4/source/rtl/objpas/sysutils/syshelph.inc"

    Merci pour vos retours. Je vais faire quelques petites modifications. Je vous remettrai là mise à jour ici.
    • "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

  8. #8
    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
    Bonjour à tous

    Je suis de retour, pour partager avec vous cette petite mise à jour.

    J'y ai ajouté des assistants pour les types : ShortInt, SmallInt, Cardinal, Word, Int64, QWord et un petit spécial pour manipuler plus facilement TDateTime. J'ai également rajouté pas mal de petites fonctions supplémentaires, Notamment pour le type String, plus 4 ou 5 pour les nombres, Je vous laisse les découvrir et en juger.

    J'ai testé la majorité des fonctions, il ne devrait pas avoir d'erreurs (normalement ) J'ai testé cette unité sous Windows 10 64 bits et Linux (Manjaro) 64 bits.

    Voilà j'attend avec impatience vos retours, suggestions, erreurs si vous en voyez, etc... bref tout ce qui pourra améliorer le bouzin.

    Merci d'avance

    Bon weekend.

    TypesHelpers.zip
    • "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

Discussions similaires

  1. Un plugin Gulp qui pourrait vous simplifier la vie
    Par Stnaire dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 29/06/2016, 22h25
  2. [Android] Medical ID, l'application qui pourrait vous sauver la vie!
    Par Ouaibou dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 18/07/2014, 09h23
  3. Réponses: 1
    Dernier message: 19/06/2012, 06h53
  4. Réponses: 8
    Dernier message: 28/07/2007, 14h43
  5. [musique] création d'une interface pour se simplifier la vie
    Par Christophe93250 dans le forum Access
    Réponses: 8
    Dernier message: 08/01/2006, 12h21

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