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

VB.NET Discussion :

Fonction à retour Multiple


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Par défaut Fonction à retour Multiple
    Bonjour,


    Je suis débutant et je voulais savoir si une Fonction peut retourner plusieurs valeurs ?


    Du type :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function Calculs() As string
     
    If.... then ....
     
    End If 'on fait ses calculs nécessaires
    .
    .
    .
    Return
    Return
    Return
     
    End Function

    Est ce réalisable ?


    Cordialement,
    Bacube

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    ton exemple de code n'est pas le plus explicite

    si tu veux que la valeur ne soit pas la même retournée selon le cas c'est faisable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if condition then
        return "valeur1"
      else
        return "valeur2"
    end if
    si tu veux que la fonction retourne plusieurs choses il suffit soit de mettre un type adapté en sortie, soit plusieurs paramètres byref (moins propre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function nom () as list(of string)
      dim l as new list(of string)
     
      l.Add("valeur1")
      l.Add("valeur2")
      return l
     
    end function
    ici on retourne plusieurs string dans une collection (une collection sert à regrouper plusieurs variables dans une seule
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Bonjour,

    Non une fonction ne peut avoir qu'un seul return.

    Cependant, tu peux passer des paramètres "ByRef" qui garderont les modifications apportées dans ta fonction.
    Dans une fonction, tu peux passer des paramètres "ByVal" ou "ByRef" :
    - Byval signifie que tu créé une copie de l'objet voulue et c'est cette copie qui sera utilisée à l'intérieur de ta fonction. A la fin de l'exécution de ta fonction, cette copie est détruite.
    - ByRef signifie que que l'objet que tu utilises dans ta fonction et celui que tu as passé en paramètre (à l'appel de ta fonction) pointeront sur le même espace mémoire (donc en gros c'est le même).

    Sinon, si tu as beaucoup de choses à retourner, tu peux créer un tableau contenant tout tes résultats de calculs par exemple...

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Au sens strict de la programmation orientée object, une methode (fonction) ne pet retourner qu'un seul type d'object. Dans l'exemple que tu as posté, ta fonction ne peut retourner qu'un seul object de type string !!!
    Reformule ta question si nous sommes passer à côté de tes attentes.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Gurdil le nain Voir le message
    Bonjour,

    Non une fonction ne peut avoir qu'un seul return.

    Cependant, tu peux passer des paramètres "ByRef" qui garderont les modifications apportées dans ta fonction.
    Dans une fonction, tu peux passer des paramètres "ByVal" ou "ByRef" :
    - Byval signifie que tu créé une copie de l'objet voulue et c'est cette copie qui sera utilisée à l'intérieur de ta fonction. A la fin de l'exécution de ta fonction, cette copie est détruite.
    - ByRef signifie que que l'objet que tu utilises dans ta fonction et celui que tu as passé en paramètre (à l'appel de ta fonction) pointeront sur le même espace mémoire (donc en gros c'est le même). ...
    Je ne suis pas trop d'accord (enfin pas d'accord du tout)avec ce que tu lui proposes. C'est une approche typiquement non objet.

    Si il a une fonction qui doit retourner "divers" choses (disons plus de deux, mais même plus de une, sauf tableau ou list bien sur), le plus logique est qu'il l'encapsule dans une autre classe (éventuellement Private) sous forme de méthode qui modifiera les propriétés de cette instance de classe.

    L'autre solution est de définir une classe ou un structure spécifique au retour de la foncition.

    Le retour de valeur par "ByRef" peut difficilement être qualifié comme une option normale en POO ; même si le concept existe dans les langages .Net ( du moins C#, C++ et VB.Net, pour les autres je ne sais pas) il est intéressant de noter qu'il est étranger à Java par exemple.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Par défaut
    Merci pour vos réponses !

    Je voulais créer une fonction qui permet de lancer un calcul automatiquement et renvoyer les données aux différents labels.

    J'ai réussi à réaliser ça, mais je dois mettre ce code dans chaque "TextBox_textChanged"


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Public Class App1
    Public a as sting
    Public b as string
    Public c as string
    Public d as string
    Public e as string
    Public f as string
    Public g as string
    Public h as string
    Public i as string
    Public j as string
     
    Private Sub Textbox1_TextChanger(ByVal sender as System.Object, ByVal e as System.EventArgs) Handles TextBox1.TextChanged
    If App1.TextBox1.Text <> "0" _
               And TextBox2.Text <> "0" _
               And TextBox3.Text <> "0" _
               And TextBox4.Text <> "0" _
               And TextBox5.Text <> "0" _
               And TextBox6.Text <> "0" _
               And TextBox7.Text <> "0" _
               And TextBox8.Text <> "0" Then
     
    'Calcul1
    a =Calcul1()
    RécupCalcul1.text = a
     
    'Calcul2
    b =Calcul2()
    RécupCalcul2.text = b
     
    'Calcul3
    c =Calcul3()
    RécupCalcul3.text = c
     
    'Calcul4
    d =Calcul4()
    RécupCalcul4.text = d
     
    'Calcul5
    e =Calcul5()
    RécupCalcul5.text = e
     
    'Calcul6
    f =Calcul6()
    RécupCalcul6.text = f
     
    'Calcul7
    g =Calcul7()
    RécupCalcul7.text = g
     
    'Calcul8
    h =Calcul8()
    RécupCalcul8.text = h
     
    'Calcul9
    i =Calcul9()
    RécupCalcul9.text = i
     
    'Calcul10
    j =Calcul10()
    RécupCalcul10.text = j
     
     
            End If
    end sub
    End Class


    Le soucis c'est que je dois remettre dans chaque "TextBox_TextChanged" ce code. Et j'ai neuf TextBox... Donc ça charge le programme pour rien je trouve, car c'est à chaque fois le même code...


    Donc j'ai mis ça sous forme de fonction. C'est ce que j'ai mis dans mon programme mais ne marche pas.


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Module Execution
    Public a as string
    Public a as sting
    Public b as string
    Public c as string
    Public d as string
    Public e as string
    Public f as string
    Public g as string
    Public h as string
    Public i as string
    Public j as string
     
     
     
     
     
     
    Function AutomationCalculs() As String
            If App1.TextBox1.Text <> "0" _
               And App1.TextBox2.Text <> "0" _
               And App1.TextBox3.Text <> "0" _
               And App1.TextBox4.Text <> "0" _
               And App1.TextBox5.Text <> "0" _
               And App1.TextBox6.Text <> "0" _
               And App1.TextBox7.Text <> "0" _
               And App1.TextBox8.Text <> "0" Then
     
    'Calcul1
    a =Calcul1()
    App1.RécupCalcul1.text = a
     
    'Calcul2
    b =Calcul2()
    App1.RécupCalcul2.text = b
     
    'Calcul3
    c =Calcul3()
    App1.RécupCalcul3.text = c
     
    'Calcul4
    d =Calcul4()
    App1.RécupCalcul4.text = d
     
    'Calcul5
    e =Calcul5()
    App1.RécupCalcul5.text = e
     
    'Calcul6
    f =Calcul6()
    App1.RécupCalcul6.text = f
     
    'Calcul7
    g =Calcul7()
    App1.RécupCalcul7.text = g
     
    'Calcul8
    h =Calcul8()
    App1.RécupCalcul8.text = h
     
    'Calcul9
    i =Calcul9()
    App1.RécupCalcul9.text = i
     
    'Calcul10
    j =Calcul10()
    App1.RécupCalcul10.text = j
     
     
            End If
     
            Return a
            Return b
            Return c
            Return d
            Return e
            Return f
            Return g
            Return h
            Return i
            Return j
     
        End Function
    End Module

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    en plus d'expliquer le problème que tu rencontres il faut toujours expliquer la problématique de base, surtout quand on est débutant, ca permet d'avoir des autres pistes auxquelles on aurait pas pensé
    parce que dans ton cas il y a des tas de solutions

    par exemple tu peux faire une méthode qui contient tout ce code et appeler la méthode sur tous les textbox_changed
    ou encore mieux faire Handles TextBox1.TextChanged, TextBox2.Changed, etc...
    comme ca tous les évènements tombent sur la même méthode


    il faut nommer ses controles et toutes ses variables avec des noms explicite
    textbox1 c'est à éviter

    de plus vu ton code, je te conseille de lire un cours/tuto, certains sont référencés par ce site (voir en haut) ou encore http://plasserre.developpez.com/cours/vb-net/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    De plus, pourquoi vouloir retourner tous les strings ?

    Tu assignes leur valeurs dans tes labels, tu n'as pas besoin de les retourner...

  9. #9
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Que font les methodes calculp p={0....9} ?
    Peux-tu poster le code ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Par défaut
    Ok ok

    Le programme, est basé sur le calcul d'engrenage. Il devra, une fois fini, forcer les paramètres d'une pièce 3D existante, faite sous SolidEdge.

    Voilà la structure de mon programme :




    La flèche rouge et bleu sont inutile sur ce shéma.

    Le Module Calcul est un module dédié uniquement à des fonction de calculs (d, da, df, d, st, ...)
    Le Module Exécution est un module se chargeant de créer les tableaux sur les différents formulaire ayant des tableaux.
    Le formulaire MenuApp peux ouvrir les deux Formulaires via deux boutons
    Le formulaire Engrenage est un formulaire de calculs, via l'insertion des données dans des textbox, et en appelant les fonctions du module Calculs
    Le Formulaire Alésage est un formulaire de calculs, via l'insertion données dans des textbox, et en appelant les fonctions du module Calculs et Execution


    ce qui m'intéresse est le fomulaire "Engrenage", car il y a au total 9 TextBox, pour les différentes valeurs connues:

    -Module : m
    -Nombre de dents : Z
    ...

    Voici ça forme :




    Pour les calculs des différents diamètres (Primitif, pied, têtes, Base), je leurs ai dédiés à chacun une fonction dans le "module calculs". Et en appyant sur un bouton tout se fesait.

    Maintenant je souhaite que lorsque les chants requis soit complétés (ici différents de "0", c'est la valeur d'origine du TextBox), le calcul se fait de manière automatique.

    Voilà ce que je souhaite développer. En espérant que ça vous aide à mieux comprendre mon problème.

    P.S. : j'ai le PDF de ce cours, qui m'aide beaucoup, mais je n'ai pas encore eu le temps de le finir...

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    un peu de POO ne fait pas de mal, surtout si le calcul est différent pour chaque type de données

    genre une classe avec une méthode calcul mustoverride
    pour chaque type de données tu hérite de la classe et écrit le calcul
    ensuite tu ajoutes dans une List(Of ) chaque instance

    et au final ton formulaire se retrouve avec 10 lignes de code (for each créer un textbox, for each si textbox vaut encore "0" ne rien faire sinon for each instance.calcul)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Par défaut
    Merci, je vais lire dans le cours la P.O.O. alors

    A titre d'informations, la P.O.O. est assez "facile" à prendre en main ? enfin pour un débutant ça ne sera pas trop compliqué ?

    Pour répondre à WOLO Laurent

    les "calculs" sont les calculs de diamètres et absisses curvilignes pour les engrenages.

    du type :

    d = m * z
    da = d + 2 * m
    df = d - 2.5 * m
    ...

    Par exemple en code :

    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
    26
    27
    Module Calculs
    Public Z as single
    Public m as single
    Public d as single
    Public da as single
    Public df as single
     
     
    Function diametrePtf(byref d as single, byref m as single) as single
    'd = csng(m * z)
    return csng(m * z)
    end function
     
    Function diametreTete(byref d as single, byref m as single) as single
    'da = csng(d + (2 * m))
    return csng(d + (2 * m))
    end function
     
    Function diametrepPd(byref m as single, byref z as single) as single
    'df =csng(d - (2.5 * m))
    return csng(d - (2.5 * m))
    end function
    .
    .
    .
    .
    End Module


    Je ne mets pas les absisses curvilignes car c'est assez complexe à expliquer. Celà fait référence au Involute pour les développantes de cercles typiques des dentures d'engrenages.

  13. #13
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    la POO ca s'apprend vite, et ca a l'avantage d'être structurant
    indirectement ca sépare le code métier du code de mise en page
    ca réduit le nombre de lignes de code, et donc le nombre de bug et facilite la maintenance
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Par défaut
    Ok ok, je m'y mets. Donc pour faire ce que je souhaite, je dois passer par de la P.O.O. c'est bien ça ?

  15. #15
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    Citation Envoyé par Bacube Voir le message
    Ok ok, je m'y mets. Donc pour faire ce que je souhaite je dois passer par du P.O.O. c'est bien ça ?
    ce que tu décris a l'air de différer de ce que j'avais compris donc mon explication n'est surement plus applicable

    une fois que tu auras compris la POO tu verras si tu peux et comment l'appliquer à ton cas
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 81
    Par défaut
    Je vais travailler sur ça, et voir ce que je peux faire. En tout cas merci pour vos réponses !

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/10/2014, 19h15
  2. retour multiple de fonction
    Par danathane dans le forum Langage
    Réponses: 2
    Dernier message: 13/11/2008, 12h14
  3. fonction clic multiple ne marche pas !
    Par decksroy dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 06/10/2006, 10h55
  4. Fonction: Retour d'un SET dynamique
    Par @n@kin.be dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 16/06/2006, 15h40
  5. fonction retour pipelined
    Par caesa dans le forum Oracle
    Réponses: 13
    Dernier message: 27/03/2006, 16h26

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