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

Langage Delphi Discussion :

Nombre paramètres fonction et appel.


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut Nombre paramètres fonction et appel.
    Bonjour les amis,
    J'essaie de retranscrire un programme Delphi en RealBasic (Xojo) et je rencontre un problème de fonction, le nombre de paramètres de la fonction est différent que lors de l'appel.
    Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function NiveauA(v:TypeExpression;t:TTypePile;O:TOpType=OpNull;n:string=''):TNiveau;
    Et voici l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    niveauA(Value[1],TypeValue)
    Peut-on comme ça avoir moins de paramètres à l'appel de la fonction?
    Si oui, comment est-ce géré?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    Oui c'est des paramètres optionnels avec une valeur par défaut, tout à fait normal.

    Quel est le problème ?

    Delphi c'est ...; ParameterName: DataType = DefaultValue; ...
    Xojo c'est ..., ParameterName As DataType = DefaultValue, ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Oui mais Xojo demande le même nombre de paramètres à l'appel que dans la fonction et comment savoir quel est le paramètre envoyé par rapport à ceux qui reçoivent?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    Je ne vois pas l'intérêt de mettre des paramètres avec valeurs par défaut si il faut les mettre explicitement, il y a de grande chance que cela fonctionne comme en Delphi, C++ ...

    Ce n'est pas sur un forum Delphi que tu auras la réponse sur une question en Xojo mais tu as deux possibilités:

    - l'ordre tout simplement, donc pour passer le 4ème paramètre tu dois forcément fourni le 3ème

    - le nommage de paramètre comme en OLE soit pour un Excel.Application.ActiveWorkBook.SaveAs(Filename := SaveAsFileName, FileFormat := Excel2000WorkbookNormal) sachant que Filename c'est le premier paramètre, FileFormat le second sur une fonction qui en compte une bonne dizaine, je n'ai jamais songé à les mettre dans le désordre, en général, on met EmptyParam pour passer les paramètres intermédiaires, je ne sais pas si le nommage permet de contourner l'ordre.


    EDIT en fait, faut juste lire la documentation Optional
    En thoérie ..., [Optional] ParameterName As DataType [= DefaultValue], ... Optional et DefaultValue sont deux façon de déclarer un paramètre optionnel, à voir si on peut les cumuler (même si cela semble pas nécessaire)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Je vais essayer avec des valeurs bidon pour les 2 autres paramètres mais ce que je ne pige pas c'est que Delphi permette ça comme la syntaxe est rigoureuse.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    Quoi ?
    Valeurs Bidons ???
    Vous êtes difficile à comprendre, veuillez apprendre correctement les bases du Delphi et du Xojo avant de vous lancer sur une traduction foireuse.

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    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 877
    Points : 11 373
    Points
    11 373
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Comme le dit ShaiLeTroll, Delphi exige qu'un appel fournisse successivement tous les paramètres précédant celui (ou ceux consécutifs) que l'on veut laisser à leur valeur définie par défaut.
    Il n'y a ainsi aucune ambigüité puisque seuls le(s) paramètre(s) de droite possédant une valeur par défaut peuvent être omis (cad que leur absence dans notre appel est remplacée par la valeur par défaut lors de la compilation).
    Par contre, un énième paramètre avec valeur par défaut ne peut être omis pour lui attribuer sa valeur par défaut si c'est celle qu'on souhaite, du moment qu'un paramètre suivant doit être fixé à une autre valeur que celle par défaut.

    Et son lien sur la doc XoJo est clair.

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    D'ailleurs lorsque les paramètres par défaut sont trop nombreux et donc pénible à fournir, si leur type est suffisamment différent, on peut déclarer plusieurs fonctions en overload pour fournir des variantes plus facile à utiliser pour certains paramètres les plus à droite.

    On voit cela par exemple avec MessageDlg et MessageDlgPos qui propose des raccourcis à MessageDlgPosHelp pour éviter de devoir mettre plein de paramètre avec une valeur neutre comme '' ou 0.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Je connais un peu Delphi et un peu Xojo sinon je n'aurais pas posé cette question.
    Tout ce que j'ai appris en Delphi c'est que je devais déclarer toutes les variables, les procédures, les fonctions avec un certain nombre de paramètres et l'appel de ces fonctions avec les mêmes variables de même type...
    Tout ce que je sais en Xojo c'est que l'appel d'une fonction réclame les mêmes types de variable et dans le bon ordre.
    Quand je parle de valeurs bidon je veux dire que j'enverrai des valeurs "nulles" comme elles ne sont pas demandées dans la fonction si le nombre de variables n'a pas d'importance dans la fonction et dans l'appel de cette même fonction.
    ShaiLeTroll Pas besoin d'aboyer avec moi ça ne marche pas. Je t'ai simplement demandé si on pouvait déclarer une fonction avec n paramètres et si on pouvait appeler la fonction avec ShaiLeTroll@#@ paramètres en Delphi.

  10. #10
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Tout ce que j'ai appris en Delphi c'est que je devais déclarer toutes les variables, les procédures, les fonctions avec un certain nombre de paramètres et l'appel de ces fonctions avec les mêmes variables de même type...
    L'appel d'une fonction s'effectue toujours avec le nombre correct d'arguments si l'un d'entre eux est omis le compilateur fournit sa valeur par défaut

    L'appel selon le développeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    niveauA(Value[1],TypeValue)
    sera traduit par le compilateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    niveauA(Value[1],TypeValue, OpNull ,'')
    Contrairement aux langages interprétés ou basés sur le variant dont on peut appeler une fonction avec n'importe quel nombre d'arguments les langages typés imposent la définition d'une valeur par défaut pour considérer le paramètre comme optionnel


    si tu as besoin d'une fonction avec un nombre variable d'arguments tu as deux choix :
    si les paramètres sont de même type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function Max(const args :array of Double):Double;
    sinon tu pourras utiliser array of const pour passer n'importe quel type d'arguments

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure operation(const args :array of const);
    l'appel s'effectue ainsi


  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Merci Wheel,
    Au moins je sais maintenant (ce que je ne trouve pas logique pas rapport à la rigueur de la déclaration des variables en Delphi).
    Notre éminent ShaiLeTroll semble même connaître Xojo mais là rien à faire il faut le même nombre de paramètres de même type des deux côtés.
    Ça m'étonnerait qu'il s'abaisse à utiliser un tel langage mais je vous invite à le découvrir, pour les bordéliques comme moi rien de tel pour gérer les procédures, les modules, etc.
    Si Delphi et successeurs étaient conçus comme ça ils seraient numéro 1 car ils restent plus performants en temps de traitement et le C++ deviendrait C--.

  12. #12
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    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 877
    Points : 11 373
    Points
    11 373
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Je ne vois aucun manque de rigueur en Pascal : la déclaration d'une fonction indique tous ses paramètres en précisant lesquels disposent d'une valeur par défaut permettant d'alléger l'écriture de l'appel, qui se situent tous en fin de déclaration.

    Pour éviter toute ambigüité, l'appel doit fournir une valeur pour tous les premiers paramètres, jusqu'au dernier non optionnel ou optionnel pour lequel on veut une autre valeur que celle par défaut.

    Le même mécanisme me semble possible avec Xojo, dont la "rigueur" s'accommode d'une possibilité supplémentaire : ne pas spécifier la valeur par défaut d'un paramètre optionnel, lequel se voit alors attribuer celle liée à son type (0 pour un entier d'après l'exemple de l'aide en ligne).

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Tout à fait Tourlourou mais en Xojo il faut que les paramètres soient de type identique et autant à la déclaration qu'à l'appel de la fonction.

  14. #14
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 388
    Points : 3 160
    Points
    3 160
    Par défaut
    Bonjour,

    je n'ai toujours pas compris ta question :

    Xojo

    MyMethod(a As Integer, b As Integer, Optional c As Integer = 5)
    Appel :
    MyMethod(3, 4)
    c prend la valeur 5

    Delphi

    Procedure MyMethod( a: Integer ; b : Integer ; c : Integer = 5) ;
    Appel
    MyMethod(3, 4) ;
    C prend la valeur 5

    Je ne vois pas les différences (Sauf qu'avec Xojo on peut omettre =5, alors c = 0 je crois)

    A+
    Charly

  15. #15
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    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 877
    Points : 11 373
    Points
    11 373
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par BBouille Voir le message
    Tout à fait Tourlourou mais en Xojo il faut que les paramètres soient de type identique et autant à la déclaration qu'à l'appel de la fonction.
    Mais, en Pascal... aussi !
    Les seules exceptions ont été citées par wheel : procedure operation(const args :array of const); et n'ont d'utilité, je pense, que surtout pour s'interfacer avec du code externe, DLL en C par exemple, langage moins connu pour sa rigueur que le Pascal Mais il y a pê d'autres cas d'usage où ça se justifie.

  16. #16
    Membre confirmé Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 323
    Points : 484
    Points
    484
    Par défaut
    Bonjour à tous,
    Il me semble d'ailleurs que le Pascal est encore très enseigné comme outil pédagogique, justement pour sa rigueur et sa simplicité.
    @BBouille : tu ne nous as pas expliqué les raisons de ce changement de langage. Y a-t-il des arguments techniques ?

  17. #17
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par BBouille Voir le message
    Je connais un peu Delphi et un peu Xojo sinon je n'aurais pas posé cette question.
    Tout ce que j'ai appris en Delphi c'est que je devais déclarer toutes les variables, les procédures, les fonctions avec un certain nombre de paramètres et l'appel de ces fonctions avec les mêmes variables de même type...
    Tout ce que je sais en Xojo c'est que l'appel d'une fonction réclame les mêmes types de variable et dans le bon ordre.
    Quand je parle de valeurs bidon je veux dire que j'enverrai des valeurs "nulles" comme elles ne sont pas demandées dans la fonction si le nombre de variables n'a pas d'importance dans la fonction et dans l'appel de cette même fonction.
    ShaiLeTroll Pas besoin d'aboyer avec moi ça ne marche pas. Je t'ai simplement demandé si on pouvait déclarer une fonction avec n paramètres et si on pouvait appeler la fonction avec ShaiLeTroll@#@ paramètres en Delphi.
    alors je ne connaissait pas Xojo...et vois que c'est une évolution de RealBasic lui même inspiré de VB6...il y a mieux comme génèse, mais on ne choisi pas ses parents

    pour reprendre ta remarque, non les valeurs ne sont pas "nulles", elles prennent - comme cela t'a déjà été expliqué - la valeur indiquée dans la déclaration de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure test(a: Integer; b: String = 'hello'; c: Integer = 5; d: Boolean = True);
    ...
    begin
      test(1, 'str', 8, False); // => tous les paramètres sont précisés
      test(2); // => les paramètres non précisés prennent la valeur par défaut indiquée : test(2, 'hello', 5, True);
      test(3, 'toto'); // => test(3, 'toto', 5, True);
      test(4, 'tutu', 8); // => test(3, 'tutu', 8, True);
    end;
    c'est assez pratique quand on fait évoluer une fonction en lui ajoutant un paramètre qu'on avait pas prévu au départ...exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    procedure ImprimeBordereau(numBordereau: Integer); // version 1
    procedure ImprimeBordereau(numBordereau: Integer; nbCopies: Integer = 1); // version 2, par défaut, 1 seul exemplaire
    on ajoute le paramètre pour indiquer le nombre d'exemplaires, et en lui fixant une valeur par défaut à 1 on s'assure que partout dans le code où on ne le précise pas, on aura tout de même un exemplaire.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par Galet Voir le message
    Bonjour à tous,
    Il me semble d'ailleurs que le Pascal est encore très enseigné comme outil pédagogique, justement pour sa rigueur et sa simplicité.
    @BBouille : tu ne nous as pas expliqué les raisons de ce changement de langage. Y a-t-il des arguments techniques ?
    Sorry Galet j'avais zappé ton intervention.
    Si j'ai changé c'est tout simplement par facilité.
    Avec Realbasic (Xojo) tu peux ranger tes procédures (méthodes) facilement avec tes classes, etc.
    En Delphi je me perdais dans mes unités, etc, une fois que j'atteignais un certain nombre de procédures par unité.
    C'est pourquoi j'aurais aimé un langage qui soit aussi performant que le Pascal (Delphi) mais aussi pratique à gérer que le Realbasic.
    Si j'avais été Niklaus Wirth en toute modestie c'est ce que j'aurais fait.

  19. #19
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 388
    Points : 3 160
    Points
    3 160
    Par défaut
    Bonjour,

    En Delphi je me perdais dans mes unités, etc, une fois que j'atteignais un certain nombre de procédures par unité.
    C'est peut être toi qui manque de rigueur dans l'écriture de ton code ?

    En Delphi aussi, les procédures peuvent être rangées avec les classes et comme tout est déclaré dans l'Interface, il est facile de retrouver une procédure dans le code (on peut même faire une recherche dans plusieurs unités.

    A+
    Charly

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Je suis bordélique mais quand on ne connaît pas on ne sait pas.
    Paul Toth: Non on ne choisit pas ses parents mais il est bon d'aller voir chez le voisin.
    Tu n'es qu'un utilisateur et si j'étais aussi intelligent que toi j'aurais déjà créé mon propre Delphi.
    J'aurais fait un Delphi présenté comme Xojo.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/07/2021, 11h00
  2. Réponses: 15
    Dernier message: 27/02/2014, 12h22
  3. Réponses: 34
    Dernier message: 27/08/2012, 13h01
  4. Réponses: 7
    Dernier message: 17/11/2011, 10h16
  5. passage de paramètre d'une fonction fortran appelée depuis python
    Par Dreyliciouss dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 20/07/2010, 10h44

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