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 :

[Tableau] Comment retourner un tableau de record avec une fonction ?


Sujet :

Langage Delphi

  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut [Tableau] Comment retourner un tableau de record avec une fonction ?
    Bonjour,

    J'aimerai pouvoir retourner via une fonction un tableau (dynamique ou non).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Type
      Maclass = class
        private
          FTableau : Array of String;
        published
        public
          function GetTableau : ????;
      end;
    1- Est-ce possible ?
    2- Si oui, comment ?

    Merci
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    En déclarant un type pour ton tableau ( ? ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Type
      TTableau: Array of string;
     
      Maclass = class
        private
          FTableau : TTableau;
        published
        public
          function GetTableau : TTableau;
      end;
    Pas testé, mais ça doit le faire

    @+ Claudius

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Merci

    *S'en va aller acheter à prisu un cerveau*
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Attention avec cette forme du langage. Elle est dangereuse, et pour une raison mystérieuse.

    Ce que je vais donner ici, je n'ai pas fait le test explicite en Delphi pour l'appuyer, mais j'en suis presque certain.
    Edit : vérifié dans Delphi, c'est bien vrai.

    Si ta fonction GetTableau renvoie le tableau FTableau directement :
    Alors, le tableau renvoyé sera lié à FTableau, de telle sorte que si tu modifies un élément de celui-ci, le même élément de FTableau sera modifié également !
    Donc, tu ouvres une portes à la modification du tableau interne depuis l'extérieur de ton objet.

    Pour cette raison, on préfère utiliser un paramètre de sortie (out) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure GetTableau(out Tableau: TTableau);
    begin
      Tableau := Copy(FTableau);
    end;
    Ca c'est sans danger, car le contenu du tableau sera bel et bien recopié.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par sjrd Voir le message
    Alors, le tableau renvoyé sera lié à FTableau, de telle sorte que si tu modifies un élément de celui-ci, le même élément de FTableau sera modifié également !
    Donc, tu ouvres une portes à la modification du tableau interne depuis l'extérieur de ton objet.
    Dis moi, cette inquiétude - ou certitude - est-elle liée au fait qu'on parle d'un tableau ? et si oui, est-ce limité au tableau ?

    @+

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Attention avec cette forme du langage. Elle est dangereuse, et pour une raison mystérieuse.

    Ce que je vais donner ici, je n'ai pas fait le test explicite en Delphi pour l'appuyer, mais j'en suis presque certain.

    Si ta fonction GetTableau renvoie le tableau FTableau directement :
    Alors, le tableau renvoyé sera lié à FTableau, de telle sorte que si tu modifies un élément de celui-ci, le même élément de FTableau sera modifié également !
    Donc, tu ouvres une portes à la modification du tableau interne depuis l'extérieur de ton objet.

    Pour cette raison, on préfère utiliser un paramètre de sortie (out) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure GetTableau(out Tableau: TTableau);
    begin
      Tableau := Copy(FTableau);
    end;
    Ca c'est sans danger, car le contenu du tableau sera bel et bien recopié.
    Je n'utilise pas le tableau de cette manière, donc pas de soucis.
    Sinon, il m'arrive parfois d'utiliser cette "copie" des pointeurs pour gèrer des objets ou variables.

    ex:

    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
     
    Type
      TTableau: Array of string;
     
      Maclass = class
        private
          FMemo : TMemo;
          procedure AddtoMemo(sText : String);
        published
          property Memo : TMemo read FMemo Write FMemo;
        public
          function GetTableau : TTableau;
      end;
     
    //...
    procedure Maclass.AddtoMemo(sText : String);
    begin
      if assigned(FMemo) then
      With FMemo do
      begin
        while lines.count > 500 then
          delete(0);
        Lines.add(sText);
      end;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut


    Dis moi, cette inquiétude - ou certitude - est-elle liée au fait qu'on parle d'un tableau ? et si oui, est-ce limité au tableau ?

    @+
    C'est lié - et limité - à l'utilisation des tableaux dynamiques. C'est une de leurs bizarreries

    Au fait, j'ai vérifié ce que j'avançais : j'avais bien raison
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par sjrd Voir le message
    C'est lié - et limité - à l'utilisation des tableaux dynamiques. C'est une de leurs bizarreries
    Bon il faudra que je m'en souvienne.
    Merci

    @+

  9. #9
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Juste pour savoir, si on met un var à la place du out "ça revient" au même (si on ne fait que de la sortie, var permettant de faire de l'entrée/sortie) ?
    Pour un objet, on peut utiliser Out aussi ?

  10. #10
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par bubulemaster Voir le message
    Juste pour savoir, si on met un var à la place du out "ça revient" au même (si on ne fait que de la sortie, var permettant de faire de l'entrée/sortie) ?
    Oui c'est exactement cela.
    Citation Envoyé par bubulemaster Voir le message
    Pour un objet, on peut utiliser Out aussi ?
    9 chances sur 10 que ce n'est pas ce que tu veux faire Parce qu'en général, on n'utilise var et out sur des objets que si l'on sait pertinament ce qu'on fait : donc on ne pose pas la question
    Quel est l'usage que tu voudrais ?
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

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

Discussions similaires

  1. Réponses: 28
    Dernier message: 02/09/2008, 13h54
  2. Retourner un tableau d'entier avec une fonction ?
    Par Seb33300 dans le forum C++
    Réponses: 10
    Dernier message: 05/04/2007, 16h25
  3. Comment retourner un tableau de valeurs?
    Par DOC doc doc dans le forum C++
    Réponses: 6
    Dernier message: 20/03/2007, 16h28
  4. Réponses: 4
    Dernier message: 16/01/2007, 13h42
  5. [plpgsql] comment retourner un tableau
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/06/2004, 21h09

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