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 :

Module et function [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Août 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 9
    Par défaut Module et function
    Bonsoir,

    je sas que je suis un débutant en programmation mais j'aimerais avoir des conseil sans avoir tout cuit dans le bec
    mais avoir de l'aide pour essayer d'avancer

    j'ai crée dans mon programme un module une function pour qu'il copie du contenue d'un textbox qui est dans un form vers un autre textbox dans un autre form ça fonctionne mais mais j'ai un message d'erreur qui dit:

    Warning 1 Function 'prixres' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.


    que puis-je faire pour enlever mon avertisement ?

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Tu obtiens cette erreur (cet avertissement pour être précis) car ta fonction peut ne peut pas renvoyer de valeurs dans certains cas (après où et pourquoi ça dépend de la fonction).
    Donc pour supprimer l'avertissement, il suffit juste de s'assurer qu'une valeur est toujours renvoyée à un moment où un autre. (ou qu'une exception est lancée pour signifier un comportement anormal et donc "l'impossibilité" de retourner une valeur)

    un exemple simpliste pour illustrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function Divide (dividend As Integer, divisor As Integer) As Integer
        If divisor <> 0 Then
            Return dividend \ divisor
        End If
    End Function
    Ici, je définis une fonction (bidon) réalisant la division (entière), et je vérifie que le diviseur ne soit pas 0 ; sauf qu'en l'état si mon diviseur vaut 0, ma fonction ne renvoie rien (vu qu'on entre pas dans le If)

    Pour supprimer l'avertissement, il me faut donc soit toujours renvoyer une valeur, mais là se pose la question de quoi renvoyer quand le diviseur vaut 0 (on pourrait imaginer plusieurs "approches" selon le contexte ; renvoyer un Double et utiliser Double.NaN, renvoyer un Nullable(Of Integer) et utiliser Nothing ou autre) ; ou bien déclencher une exception et c'est déjà ce que fait le framework avec DivideByZeroException (donc en l'état supprimer le If)

    Après l'exemple (et donc les "solutions" dans ce cas) est simpliste, à toi d'adapter à ton cas.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    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 200
    Par défaut
    si ta fonction n'a aucune raison de renvoyer une valeur à l'appelant il faut la transformer en sub (méthode)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    J'ajouterai un dernier point en reprenant l'exemple de la division entière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Divide (dividend As Integer, divisor As Integer) As Nullable(Of Integer)
        Dim result As Nullable(Of Integer)
        If divisor <> 0 Then
            result = dividend \ divisor
        End If
        Return Result
    End Function
    Dans ce cas il est possible que la variable result ne soit pas initialisé et vaut donc implicitement Nothing. Mais Visual Studio affiche un avertissement pour une raison que j'ignore....

    Il suffit de transformer le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim result As Nullable(Of Integer)
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim result As Nullable(Of Integer) = Nothing
    pour que l'avertissement disparaisse.

    Sauf erreur de ma part le "= Nothing" ne change strictement rien d'un point de vue fonctionnel. C'est juste pour faire plaisir à l'analyseur de code.

  5. #5
    Membre habitué
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Août 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 9
    Par défaut
    voici comment mon code est bâtis dans mon module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Module Module1
        Function prixres()
            FACRES.facresvs.Text = prix.tbresvs.Text
            FACRES.facresvd.Text = prix.tbresvd.Text
            FACRES.facresvt.Text = prix.tbresvt.Text
            FACRES.facresvq.Text = prix.tbresvq.Text
            FACRES.facresex.Text = prix.tbresex.Text
        End Function
    End Module
    j'ai remplacer function par public sub et cela a régler mon problème merci a tous de votre aide

  6. #6
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Citation Envoyé par sinople Voir le message
    J'ajouterai un dernier point en reprenant l'exemple de la division entière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Divide (dividend As Integer, divisor As Integer) As Nullable(Of Integer)
        Dim result As Nullable(Of Integer)
        If divisor <> 0 Then
            result = dividend \ divisor
        End If
        Return Result
    End Function
    Dans ce cas il est possible que la variable result ne soit pas initialisé et vaut donc implicitement Nothing. Mais Visual Studio affiche un avertissement pour une raison que j'ignore....
    Il suffit de transformer le Dim result As Nullable(Of Integer) en Dim result As Nullable(Of Integer) = Nothing pour que l'avertissement disparaisse.
    Sauf erreur de ma part le "= Nothing" ne change strictement rien d'un point de vue fonctionnel. C'est juste pour faire plaisir à l'analyseur de code.
    Je reviens sur ce sujet
    En fait c'est exactement le même problème que celui initial (étant donné que Nothing est renvoyé dans le cas où un chemin de la fonction n'a pas de retour).
    Du point de vue du compilo, dans le cas où on ne passe pas par le If, on renvoie la valeur actuelle sauf qu'on a pas donné explicitement une valeur ; donc ce Nothing implicite est-ce vraiment la "valeur par défaut" ou a-t-on oublié de la mettre ? le compilo ne peut pas répondre et donc fait la seule chose à sa portée compte tenu du contexte, informer celui qui peut répondre du phénomène, à lui de lever ambiguïté (ou de l'ignorer)
    Après tout le code c'est avant tout pour celui qui relit, et si c'est ambigu pour le compilo ça peut l'être pour celui qui reprend le code (potentiellement soi-même un long moment après l'écriture) et ça coûte pas grand chose d'être explicite.

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

Discussions similaires

  1. Comment Activer le Module Function Export
    Par CLASSIQUE dans le forum IHM
    Réponses: 11
    Dernier message: 27/04/2013, 19h19
  2. Réponses: 2
    Dernier message: 25/06/2009, 15h05
  3. Réponses: 2
    Dernier message: 13/02/2007, 18h02
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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