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 :

Fonctionnement de iif


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut Fonctionnement de iif
    Bonjour,
    C'est juste pour avoir un peu d'aide pour comprendre la mécanique de cette méthode inline bien pratique !
    Je me retrouve dans le cas suivant :... IIf(Prea.Length > 4, Prea.Substring(0, 4), Prea) ...

    Et devinez quoi ! erreur ! il n'accepte pas le substring pour un Prea.length<4. Bon, remède facile, je m'en plains pas mais je m'interroge : comment fonctionne cette bestiole ? en toute logique, le code de la condition true n'a pas besoin d'être lu non ? pourquoi alors n'accepte-t-il pas mon bidouillage ?

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par Uranne-jimmy Voir le message
    Bonjour,
    C'est juste pour avoir un peu d'aide pour comprendre la mécanique de cette méthode inline bien pratique !
    Je me retrouve dans le cas suivant :... IIf(Prea.Length > 4, Prea.Substring(0, 4), Prea) ...

    Et devinez quoi ! erreur ! il n'accepte pas le substring pour un Prea.length<4. Bon, remède facile, je m'en plains pas mais je m'interroge : comment fonctionne cette bestiole ? en toute logique, le code de la condition true n'a pas besoin d'être lu non ? pourquoi alors n'accepte-t-il pas mon bidouillage ?
    N'oublie pas Substring est une fonction, il retourne une string, mais ne l'affecte pas à Prea si tu ne lui dis pas explicitement. (Donc pour ton test, que ce soit True ou False, Prea ne changera pas)

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim a as string = iif(i = 1, "c'est vrai", "c'est faux").tostring
    équivaut à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim a as string
    if i = 1 then
       a = "c'est vrai"
      else
       a = "c'est faux"
    end if
    une condition, 2 valeurs de sorties selon si la condition est vraie et ca retourne la valeur (à tester ou à stocker donc)
    par contre iif est As Object, il faut donc caster/convertir dans la plupart des cas
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    voir cette page :
    L'expression IIf n'utilisant pas le court-circuit, il semble que les deux propositions soient toujours évaluées. (Contrairement à If( [argument1,] argument2, argument3 )).
    Donc ici demander 4 caractères à une chaine de 3 ou moins provoque l'erreur mentionnée.
    A voir...

  5. #5
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonsoir,
    voir cette page :
    L'expression IIf n'utilisant pas le court-circuit, il semble que les deux propositions sont toujours évaluées. (Contrairement à If( [argument1,] argument2, argument3 )).
    Donc ici demander 4 caractères à une chaine de 3 ou moins provoque l'erreur mentionnée.
    A voir...
    C'était donc bien ce que je pensais, dommage pour moi, je vais devoir passer de 1 à 6 lignes ^^ Mais au moins j'aurais appris quelque chose sur le fonctionnement de ce iif.

    _Ezekiel : je sais que ça retourne uniquement un string, ici j'utilise le iif au milieu d'une fonction, je n'ai pas besoin de changer la valeur de Prea, juste de la tronquer si elle dépasse 4 lettres. D'ailleurs j'ai également besoin de garder le Prea original ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _classeurModele.Worksheets(1).name = Psolv & " " & IIf(Prea.Length > 4, Prea.Substring(0, 4), Prea) & " " & Pconc
    Et Pol63 (Auvergnat ? je viens de faire le rapprochement) : en strict, oui, il faudrait en effet caster en string dans mon cas pour que ce soit en accord avec les bonnes pratique, ça par contre, je le savais.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    pour ca moi j'ai fait une méthode d'extension (enfin une fonction)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <System.Runtime.CompilerServices.Extension()>
    public function Tronque(s as string, maxLength as integer) as string
      if s.length <= maxlength then return s
      return s.substring(0,maxLength)
    end function
    (à mettre dans un module)


    et après il n'y a plus qu'à & " " & Prea.Tronque(4) & " "

    d'une manière générale, tout ce qui peut être écrit 2x et qui est moche ou long doit être déporté
    les méthodes d'extensions sont pratiques pour déporter ce genre de chose (intellisense)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Tu as totalement raison ! Mais dans mon cas c'est vraiment utile qu'une fois, c'est pour nommer mes feuilles dans un classeur excel, tout est itératif, chaque portion n'est écrit qu'une fois. Tout mettre dans des fonctions pourrais clarifier, mais de bons commentaires suffiront, je pense ^^
    Du coup j'ai dû déclaré un petit preatemporaire en début de boucle avec un if classique, quelques lignes pour rien mais rien de bien méchant.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    il y a peut être quelque chose qui m'échappe, c'est fort possible.
    Mais si il faut écrire sur une ligne, alors en suppriment un I à IIf, cela ne fonctionne t'il pas ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _classeurModele.Worksheets(1).name = Psolv & " " & If(Prea.Length > 4, Prea.Substring(0, 4), Prea) & " " & Pconc

  9. #9
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    http://msdn.microsoft.com/en-us/library/bb513985.aspx
    Oui en effet c'est sensé marché, j'avoue que ça je ne le savais pas et ça ne sera pas utile qu'une fois >< je pensais que iif était la version inline de if, me suis trompé.

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Par défaut
    J'ai pas tout compris pourquoi tu voulais faire ça en une ligne mais tu peux toujours le faire
    En reprenant le code de Pol63
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim i As Integer
    Dim a As String
    If i = 1 Then a = "c'est vrai" : a &= " en plus" Else a = "c'est faux"
    ...

  11. #11
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    J'ai voulu le faire en ligne parce que c'était au milieu d'une chaine de caractère en fait, mais c'est juste par paraisse et par clarté.

  12. #12
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Uranne-jimmy Voir le message
    ....
    Et Pol63 (Auvergnat ? je viens de faire le rapprochement) ....
    @Uranne : Si tu t'es rappochés de l'Auvergne alors tu devrais t'y plaires à coup sure

  13. #13
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Je suis déjà on ne peux plus auvergnat , j'avais juste pas remarqué avoir un compagnon ici même sur cette partie du forum, et c'est pas désagréable !

  14. #14
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    on en trouve encore 3 autres et on se fait un concours de code comme dans the social network ? ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Je suis loin d'avoir le niveau nécessaire mais si ça s'avère possible je dis pas non :p

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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