Page 1 sur 1

[Func] Bloc conditionnel rapide

Posté : mar. 15 juin 2010 16:59
par ZDS
Tous les développeurs ont un jour compris la puissance du a?b:c, chose qui n'existe pas sous AutoIt, quel dommage... Le code qui suit est plus que trivial, voire au même niveau que les lapins crétins ^^ :

Code : Tout sélectionner

Func cond($cond, $a,$b)
    If $cond Then Return $a
    Return $b
EndFunc
Mais il vous transforme 5 lignes de codes en une seule la plupart du temps, en rendant les changements plus faciles et la compréhension parfois bien meilleure.

Exemple pour une fenêtre que l'on cale dans un coin de l'écran :

Code : Tout sélectionner

Local $LR="right", $UD = "up", $ecart = 10, $GUI
If $LR = "left" And $UD = "up" Then
    $GUI = GUICreate("Ma fenetre dans un coin ["&$LR&","&$UD&"]", 200,100, _
            $ecart,$ecart, _
            $WS_POPUP+$WS_BORDER, $WS_EX_TOPMOST)
ElseIf $LR = "left" And $UD = "down" Then
    $GUI = GUICreate("Ma fenetre dans un coin ["&$LR&","&$UD&"]", 200,100, _
            $ecart,@DesktopHeight-100-$ecart, _
            $WS_POPUP+$WS_BORDER, $WS_EX_TOPMOST)
ElseIf $LR = "right" And $UD = "up" Then
    $GUI = GUICreate("Ma fenetre dans un coin ["&$LR&","&$UD&"]", 200,100, _
            @DesktopWidth-200-$ecart,$ecart, _
            $WS_POPUP+$WS_BORDER, $WS_EX_TOPMOST)
ElseIf $LR = "right" And $UD = "down" Then
    $GUI = GUICreate("Ma fenetre dans un coin ["&$LR&","&$UD&"]", 200,100, _
            @DesktopWidth-200-$ecart,@DesktopHeight-100-$ecart, _
            $WS_POPUP+$WS_BORDER, $WS_EX_TOPMOST)
EndIf
Avec la fonction cond(...) ça donne :

Code : Tout sélectionner

Local $LR="right", $UD = "up", $ecart = 10, $GUI
$GUI = GUICreate("Ma fenetre dans un coin ["&$LR&","&$UD&"]", 200,100, _
        cond($LR="left", $ecart, @DesktopWidth-200-$ecart), cond($UD="up", $ecart, @DesktopHeight-100-$ecart), _
        $WS_POPUP+$WS_BORDER, $WS_EX_TOPMOST)
Comme dit plus haut, ça peut sembler très con, mais ça dépanne beaucoup en matière de compréhension.
Vous pouvez même ajouter un système de Controle-Break (And_then ou Or_else) en obligeant les évaluations de chaine (mais ne permet plus de calculs) :

Code : Tout sélectionner

Func condEval($cond, $a,$b)
    If $cond Then Return Eval($a)
    Return Eval($b)
EndFunc
A bientôt !