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 :

Besoin d'aide pour comprendre la déclaration de variables dans une function / sub [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut Besoin d'aide pour comprendre la déclaration de variables dans une function / sub
    Bonjour à tous,

    En fait, j'ai une question simple pour vous (pas pour moi...) :

    J'ai une fonction qui extrait des données d'une DataTable en fonction des paramètres qu'on lui passe (Table depuis laquelle on veut extraire des données, numéro du champ à filtrer dans la Table, valeur du filtre, numéro du champ à trier dans la Table, valeur du tri). Ca renvoie un DataRow().

    Mon problème c'est que la DataTable peut avoir des champs en string ou en numérique.
    Du coup, l'expression de tri va avoir des '' si c'est en string et pas de '' si c'est en numérique.

    J'ai écrit donc deux functions séparées pour la même chose selon que le filtrage ce fait sur une string ou un ushort :


    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
    Public Function ExtractDonneesDataTableDepuisString(ByRef Dtt As DataTable, ByVal NumChampFiltre As Byte, ByVal ExpressionFiltre As String, ByVal NumChampTri As Byte, ByVal ExpressionTri As String) As DataRow()
     
            'Renvoie le résultat en fonction des situations
            If NumChampFiltre = 0 And ExpressionFiltre = "" Then
                If NumChampTri = 0 And ExpressionTri = "" Then
                    Return Dtt.Select()
                Else
                    Return Dtt.Select("", Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
                End If
            Else
                If NumChampTri = 0 And ExpressionTri = "" Then
                    Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = '" & ExpressionFiltre & "'", "")
                Else
                    Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = '" & ExpressionFiltre & "'", Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
                End If
            End If
     
            Exit Function
     
        End Function
     
        Public Function ExtractDonneesDataTableDepuisUshort(ByRef Dtt As DataTable, ByVal NumChampFiltre As Byte, ByVal ExpressionFiltre As UShort, ByVal NumChampTri As Byte, ByVal ExpressionTri As String) As DataRow()
     
            'Renvoie le résultat en fonction des situations
            If NumChampFiltre = 0 And ExpressionFiltre = 0 Then
                If NumChampTri = 0 And ExpressionTri = "" Then
                    Return Dtt.Select()
                Else
                    Return Dtt.Select("", Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
                End If
            Else
                If NumChampTri = 0 And ExpressionTri = "" Then
                    Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = " & CStr(ExpressionFiltre), "")
                Else
                    Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = " & CStr(ExpressionFiltre), Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
                End If
            End If
     
            Exit Function
     
        End Function

    Est-il possible de n'avoir qu'une fonction qui fait les deux cas de figure?

    Je pensais à des trucs mais je ne sais pas si ça existe :

    - deux fonctions qui s'appellent pareil mais avec une définition du paramètre ExpressionFiltre différente (un string, l'autre ushort). L'appli choisit en fonction des paramètres passés... Je ne sais pas si ça fonctionne comme ça, ou si ça va planter?
    - Ou passer en paramètre un type générique, et dans la fonction selon le type du paramètre, faire '...' ou pas de '';
    - Ou rester avec mes deux fonctions différentes comme maintenant?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 072
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 072
    Points : 1 566
    Points
    1 566
    Par défaut
    soit 2 fonctions, soit (selon moi) un paramètre supplémentaire qui te permettra de choisir quel tri faire dans le corps de la fonction

  3. #3
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Re,
    Là je repense à mon tout dernier message (il y a un instant), pourquoi ne pas tout garder en chaîne dans le DataTable ?
    Mais pour répondre à ta question, il y a plusieurs possibilités.
    Tu pourrais utiliser des paramètres Optional pour, par exemple, spécifier les types quand tu le juges necessaire.
    Par ailleurs, il est possible d'utiliser plusieurs fonctions de même nom lorsqu'elles ont des signatures différentes et, sauf erreur de ma part, les types des paramètres participent à la definition de la signature.
    Je révise un peu et je t'informe....

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Et voilà, vite fait ...

    Le type des paramètres est effectivement déterminent de la signature d'une Sub ou d'une Function. Il suffit qu'un seul des paramètres soit de type différent et les signatures sont différentes.

    Je ne t'envoie pas de projet de test car c'est trop simple, il te suffit d'un Form avec un Button1 et tu peux y coller le code suivant pour apprécier :

    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
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            MessageBox.Show(Somme(1, 5))
            MessageBox.Show(Somme("Hola ", "como esta ?"))
            MessageBox.Show(Somme(1.5, 5.1))
     
            Affiche(DonneType(Somme(1, 5)))
            Affiche(DonneType(Somme("Hola ", "como esta ?")))
            Affiche(DonneType(Somme(1.5, 5.1)))
        End Sub
     
        Private Function Somme(N1 As Integer, N2 As Integer) As Integer
            Return N1 + N2
        End Function
     
        Private Function Somme(D1 As Double, D2 As Double) As Double
            Return D1 + D2
        End Function
     
        Private Function Somme(S1 As String, S2 As String) As String
            Return S1 & S2
        End Function
     
        Private Function DonneType(Valeur As String) As String
            Return Valeur.GetType().ToString
        End Function
     
        Private Function DonneType(Valeur As Double) As String
            Return Valeur.GetType().ToString
        End Function
     
        Private Function DonneType(Valeur As Integer) As String
            Return Valeur.GetType().ToString
        End Function
     
        Private Sub Affiche(V As Integer)
            MessageBox.Show(V)
        End Sub
     
        Private Sub Affiche(V As String)
            MessageBox.Show(V)
        End Sub
    Bon amusement ...

  5. #5
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    Je vous remercie encore de vos aides.
    J'apprend plus vite du coup et c'est vraiment agréable.

    Pour mes deux fonctions, c'est l'idée que j'avais au départ, les signatures... Mais j'avais peur de faire une erreur et que tout plante.
    Du coup, je viens de faire la modification et ça se passe bien.

    Je vais aussi creuser l'idée des paramètres Optional. Je ne connais pas encore...


    Pour les données traitées, en fait, je remplit des DataTables à partir d'une base de données avec la méthode .Fill.
    Si cette méthode remplit mes DataTables qu'avec des string seulement (même si certaines donnée sont numériques dans la base de données), ça sert à rien tout ce que je fais.
    En fait, je voulais conserver les données en numérique car je me suis dis qu'une string prend de la place mémoire comparé à un ushort ou byte.
    Du coup, je m'était dit que ça optimisait le traitement des données de conserver certaines données en ushort et byte.
    Je ne sais pas si j'ai raison dans mon raisonnement ?

    Tout garder e string serait beaucoup plus simple, c'est vrai. Surtout si .Fill revoie que des données en string dans les DataTables...

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 654
    Points : 5 209
    Points
    5 209
    Par défaut
    Citation Envoyé par Krys9292 Voir le message
    Mais j'avais peur de faire une erreur et que tout plante.
    C'est comme ça qu'on apprend !

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

Discussions similaires

  1. besoin d'aide pour comprendre Example zope
    Par julien.63 dans le forum Zope
    Réponses: 3
    Dernier message: 22/08/2007, 16h41
  2. MVC besoin d'aide pour comprendre
    Par damien77 dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 26/06/2007, 13h17
  3. besoin d'aide pour comprendre un exo simple de java
    Par chadel dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2007, 00h27
  4. [MySQL] besoin d'aide pour comprendre les injections sql
    Par cassy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/01/2007, 15h21
  5. Besoin d aide pour comprendre un code
    Par litlebasic dans le forum Delphi
    Réponses: 4
    Dernier message: 22/06/2006, 14h00

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