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 :

Liste d'appel à des fonctions avec retour boolean


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut Liste d'appel à des fonctions avec retour boolean
    Bonjour,

    Je cherche à faire quelque chose qui semble bête en apparence ...

    J'ai plusieurs fonctions de traitements (controleCeci, controlecela, etc) chacune de ses fonctions me retourne un boolean.

    Je voudrais que si l'une des fonctions retourne false alors la suivante se soit pas traité (une sorte de liste de traitement à faire)
    à part mettre un if à chaque appel, je ne vois pas comment faire.

    N'y a t-il pas moyen de boucler sur la liste de traitement à exécuter ?

    Ce n'est pas la première fois que je rencontre se problème, et à chaque fois j'ai du faire des if imbriqués pour au final ce ne soit pas lisible.
    Si je peux pour une fois corriger ceci !

    Merci de votre aide.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    plusieurs solutions

    fonction1 andalso fonction2 andalso fonction3 ...

    si le compilateur t'embete tu rajoutes un if devant

    andalso teste la condition suivante seulement si la condition retourne true, donc ca s'arrête au premier false
    (le orelse existe aussi, lui il arrête de tester dès qu'il trouve un true)



    sinon tout mettre dans un list(of func(of boolean)) et faire un foreach + invoke mais ca fait un peu plus de code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Merci pour ces réponses, le "chainage" j'avais déjà tenter au boulot, et en dépassant les 10 contrôles c'était illisible, surtout quand tu recherche lequel retourne "false" et que tu dois dire à l'utilisateur que son truc ne s'affiche pas parce qu'il n'a pas renseigné tel chose dans tel logiciel, ou qu'il ne peut pas modifier ceci parce qu'ils sont déjà arrivé à tel étape dans le workflow de la société.

    Je vais donc tenter de tester le for each + invoke

    Je reviens pour en dire le résultat ;-)
    Merci.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    plusieurs solutions

    fonction1 andalso fonction2 andalso fonction3 ...

    si le compilateur t'embete tu rajoutes un if devant

    andalso teste la condition suivante seulement si la condition retourne true, donc ca s'arrête au premier false
    (le orelse existe aussi, lui il arrête de tester dès qu'il trouve un true)



    sinon tout mettre dans un list(of func(of boolean)) et faire un foreach + invoke mais ca fait un peu plus de code
    Voici ce que j'ai fais et qui fonctionne, j'ai plus qu'à l'étoffer car durant mes traitements (ici nommés testA ...) je détermine non seulement si c'est bon mais remonte dans la classe si une correction "automatique" est nécessaire.
    En gros :

    si correction automatique necessaire ajoute (pour le moment un texte dans un list of de la classe, surement par la suite autre chose... pourquoi pas le nom de la fonction de correction avec la correction en paramètre(si possible))
    Si traitement Ok ou correction automatique nécessaire, retourne true sinon false

    Voici le code actuel donc pour aider d'autres personnes :

    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
     
    Public Sub Test()
     
            Dim contraintes As New List(Of Func(Of Boolean))()
     
            contraintes.Add(AddressOf TestA)
            contraintes.Add(AddressOf TestB)
            contraintes.Add(AddressOf TestC)
     
            Dim hasAnError As Boolean
     
            For Each t In contraintes
     
                Dim result As Boolean = t.Invoke
                If Not result Then
                    hasAnError = True
                    Exit For
                End If
     
            Next
     
        End Sub
     
     
        Public Function TestA() As Boolean
            Return True
        End Function
     
        Public Function TestB() As Boolean
            Return False
        End Function
     
        Public Function TestC() As Boolean
            Return True
        End Function
    Merci.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    après tes fonctions peuvent retourner un paramètre en plus du booléen (via ByRef)
    que ca soit un message string, ou un action/func vers un traitement à exécuter
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/11/2012, 18h14
  2. Bizarrerie avec getXhr() et ordre d'appel des fonctions
    Par LadyArwen dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2011, 11h32
  3. appeler des fonctions javascript avec php
    Par thaundeadboss dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2009, 11h18
  4. Appeler des fonctions listées dans un tableau
    Par MarieNum dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 01/01/2009, 17h31
  5. appel de fonction avec des espaces dans un paramètre
    Par jjnoui dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2008, 13h44

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