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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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