OVH Cloud OVH Cloud

Simplifier l'écriture

7 réponses
Avatar
TouTenN
Bonjour

Il est parfois possible de linéariser l'écriture de code. Exemple

>>>Transformer
if toto=1 then
rep=10
else
rep=12
end if

>>>en
if toto=1 then rep=10 else rep=12


Est il possible d'en faira autant avec des elseif??? J'ai essayé je n'y
suis pas arrivé : exemple

If TYP = "AIGG" And ori = 1 Then
If dx = "" And dy = "b" Then
num = 3
ElseIf dx = "" And dy = "h" Then
num = 1
Else
num = 2
End If
End If


Merci

7 réponses

Avatar
François Picalausa
Bonjour/Soir,

On peut même écrire dans ce cas

rep=Iif(Toto=1,10,12)



Sauf que IIf est terriblement lent parce qu'il évalue toutes les
expressions, ce qui en plus peut mener à des problèmes dans d'autres cas:

Dim Toto As UneClasse, Resultat As Boolean

'Toto Is Nothing est vrai.
'Pourtant, il tente d'évaluer Toto.Valeur = 0
'=> Erreur puisque Toto est nothing
Resultat = IIf(Toto Is Nothing, False, Toto.Valeur = 0)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Patrice Henrio" a écrit dans le
message de news:Ogn6fEj%
On peut même écrire dans ce cas

rep=Iif(Toto=1,10,12)

Pour l'autre exemple qui ne s'applique pas à chaque fois on peut
écrire

Num=Iif(TYP="AIGG" and ori=1,Iif(dx="" and dy="b",3,1),2)
C'est comme du LISP (ou Scheme pour ceux qui connaissent)
ou encore If sous VBA en Excel.

"TouTenN" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message
de news:c1cun0$8uv$
Bonjour

Il est parfois possible de linéariser l'écriture de code. Exemple

Transformer






if toto=1 then
rep
else
rep
end if

en






if toto=1 then rep else rep


Est il possible d'en faira autant avec des elseif??? J'ai essayé je
n'y suis pas arrivé : exemple

If TYP = "AIGG" And ori = 1 Then
If dx = "" And dy = "b" Then
num = 3
ElseIf dx = "" And dy = "h" Then
num = 1
Else
num = 2
End If
End If


Merci




Avatar
Patrice Henrio
On peut même écrire dans ce cas

rep=Iif(Toto=1,10,12)

Pour l'autre exemple qui ne s'applique pas à chaque fois on peut écrire

Num=Iif(TYP="AIGG" and ori=1,Iif(dx="" and dy="b",3,1),2)
C'est comme du LISP (ou Scheme pour ceux qui connaissent)
ou encore If sous VBA en Excel.

"TouTenN" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message de
news:c1cun0$8uv$
Bonjour

Il est parfois possible de linéariser l'écriture de code. Exemple

>>>Transformer
if toto=1 then
rep
else
rep
end if

>>>en
if toto=1 then rep else rep


Est il possible d'en faira autant avec des elseif??? J'ai essayé je n'y
suis pas arrivé : exemple

If TYP = "AIGG" And ori = 1 Then
If dx = "" And dy = "b" Then
num = 3
ElseIf dx = "" And dy = "h" Then
num = 1
Else
num = 2
End If
End If


Merci





Avatar
ng
On peut créer son propre IIf mais ca ne résouds pas le problème évoqué par
francois :

Private Sub Form_Load()
Dim a As Long, b As Long
a = 7
b = 8
MsgBox IIfX(a = b, "a vaut b", "a ne vaut pas b")
End Sub

Public Function IIfX(bExpression As Boolean, vTruePart As Variant,
vFalsePart As Variant) As Variant
If bExpression Then IIfX = vTruePart Else IIfX = vFalsePart
End Function

Pour l'optimiser davantage, on peut typer vTruePart, vFalsePart, IIfX en
long/string... selon le besoin.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

François Picalausa a écrit :

Bonjour/Soir,

On peut même écrire dans ce cas

rep=Iif(Toto=1,10,12)



Sauf que IIf est terriblement lent parce qu'il évalue toutes les
expressions, ce qui en plus peut mener à des problèmes dans d'autres
cas:

Dim Toto As UneClasse, Resultat As Boolean

'Toto Is Nothing est vrai.
'Pourtant, il tente d'évaluer Toto.Valeur = 0
'=> Erreur puisque Toto est nothing
Resultat = IIf(Toto Is Nothing, False, Toto.Valeur = 0)


"Patrice Henrio" a écrit dans le
message de news:Ogn6fEj%
On peut même écrire dans ce cas

rep=Iif(Toto=1,10,12)

Pour l'autre exemple qui ne s'applique pas à chaque fois on peut
écrire

Num=Iif(TYP="AIGG" and ori=1,Iif(dx="" and dy="b",3,1),2)
C'est comme du LISP (ou Scheme pour ceux qui connaissent)
ou encore If sous VBA en Excel.

"TouTenN" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message
de news:c1cun0$8uv$
Bonjour

Il est parfois possible de linéariser l'écriture de code. Exemple

Transformer






if toto=1 then
rep
else
rep
end if

en






if toto=1 then rep else rep


Est il possible d'en faira autant avec des elseif??? J'ai essayé je
n'y suis pas arrivé : exemple

If TYP = "AIGG" And ori = 1 Then
If dx = "" And dy = "b" Then
num = 3
ElseIf dx = "" And dy = "h" Then
num = 1
Else
num = 2
End If
End If


Merci






Avatar
Patrice Henrio
Je suis bien d'accord que cela ne s'applique pas à chaque fois et que de
plus c'est plus lent. Nous en avions déjà discuté il y a quelques mois.
Mais la question me semblait à la fois générale "peut-on linéariser .. ?"
et particulière avec un exemple.
Dans les deux exemples proposés la méthode fonctionne mais il est clair que
ce n'est pas très lisible (je rappelle que pour certains programmeurs LISP,
qui n'utilise que des fonctions, signifiait Liste Insipide et Stupide de
Parenthèses)
Ceci étant, je ne connais pas d'autres langages bénéficiant de la structure
Cond qui remplace avantageusement les listes de "If then else" emboîtés.



"François Picalausa" a écrit dans le message de
news:OwmA9Kj%
Bonjour/Soir,

> On peut même écrire dans ce cas
>
> rep=Iif(Toto=1,10,12)

Sauf que IIf est terriblement lent parce qu'il évalue toutes les
expressions, ce qui en plus peut mener à des problèmes dans d'autres cas:

Dim Toto As UneClasse, Resultat As Boolean

'Toto Is Nothing est vrai.
'Pourtant, il tente d'évaluer Toto.Valeur = 0
'=> Erreur puisque Toto est nothing
Resultat = IIf(Toto Is Nothing, False, Toto.Valeur = 0)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Patrice Henrio" a écrit dans le
message de news:Ogn6fEj%
> On peut même écrire dans ce cas
>
> rep=Iif(Toto=1,10,12)
>
> Pour l'autre exemple qui ne s'applique pas à chaque fois on peut
> écrire
>
> Num=Iif(TYP="AIGG" and ori=1,Iif(dx="" and dy="b",3,1),2)
> C'est comme du LISP (ou Scheme pour ceux qui connaissent)
> ou encore If sous VBA en Excel.
>
> "TouTenN" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message
> de news:c1cun0$8uv$
>> Bonjour
>>
>> Il est parfois possible de linéariser l'écriture de code. Exemple
>>
>>>>> Transformer
>> if toto=1 then
>> rep
>> else
>> rep
>> end if
>>
>>>>> en
>> if toto=1 then rep else rep
>>
>>
>> Est il possible d'en faira autant avec des elseif??? J'ai essayé je
>> n'y suis pas arrivé : exemple
>>
>> If TYP = "AIGG" And ori = 1 Then
>> If dx = "" And dy = "b" Then
>> num = 3
>> ElseIf dx = "" And dy = "h" Then
>> num = 1
>> Else
>> num = 2
>> End If
>> End If
>>
>>
>> Merci




Avatar
Jean-Marc
"Patrice Henrio" a écrit dans le
message de news:uBe17pj%
Je suis bien d'accord que cela ne s'applique pas à chaque fois et que de
plus c'est plus lent. Nous en avions déjà discuté il y a quelques mois.
Mais la question me semblait à la fois générale "peut-on linéariser .. ?"
et particulière avec un exemple.
Dans les deux exemples proposés la méthode fonctionne mais il est clair


que
ce n'est pas très lisible (je rappelle que pour certains programmeurs


LISP,
qui n'utilise que des fonctions, signifiait Liste Insipide et Stupide de
Parenthèses)



Hello,

on dit aussi "Longue et Insipide Suite de Parenthèses", qui se traduit en
anglais avec les mêmes initiales et dans le même ordre :-)

Jean-marc
Avatar
Patrice Henrio
OK.


"Jean-Marc" a écrit dans le message de
news:403a5223$0$7038$
"Patrice Henrio" a écrit dans le
message de news:uBe17pj%
> Je suis bien d'accord que cela ne s'applique pas à chaque fois et que de
> plus c'est plus lent. Nous en avions déjà discuté il y a quelques mois.
> Mais la question me semblait à la fois générale "peut-on linéariser ..


?"
> et particulière avec un exemple.
> Dans les deux exemples proposés la méthode fonctionne mais il est clair
que
> ce n'est pas très lisible (je rappelle que pour certains programmeurs
LISP,
> qui n'utilise que des fonctions, signifiait Liste Insipide et Stupide de
> Parenthèses)

Hello,

on dit aussi "Longue et Insipide Suite de Parenthèses", qui se traduit en
anglais avec les mêmes initiales et dans le même ordre :-)

Jean-marc





Avatar
TouTenN
C'est bien ce que je pensais : Il n'est pas toujours possible de linéariser
du code

Merci pour vos mises en garde

Guy