Page 1 sur 3
[Ex] Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 10:39
par MrDynoland
Créez un système de "flag" pour vos fonctions !
Bonjour à tous AutoItien !
Vous voyez certaines fonction avec le paramètre "flag" et vous aimerez faire pareil pour votre fonction ?
Pas de problème. Pour commencer ce tutoriel, je vous recommande les cours suivant :
'Les "flags"',
'Le "Si...Alors"' et
'Les Fonctions' du big-tuto de timmalos sur le Site du Zero.
C'est bon ? Alors nous allons crée une fonction :
Voilà donc une fonction nommé _Jour avec comme paramètre le choix du flag puis la variable défini qui ne veut rien dire x).
Nous allons crée les flags avec une armée de "Si...Alors", faisons le premier pour le flag 1 "Lundi" :
Code : Tout sélectionner
Func _Jour($flag)
If $flag = 1 Then
$jour = "Lundi"
EndFunc ;==>_Jour
J'ai crée une condition avec comme variable $jour qui servira de retour à la fin de notre fonction !
Continuons avec tous les autres jour puis avec la condition d'un flag trop élevé ou en dessous, mais on va assembler les conditions par ElseIf.
Code : Tout sélectionner
Func _Jour($flag)
If $flag = 1 Then
$jour = "Lundi"
ElseIf $flag = 2 Then
$jour = "Mardi"
ElseIf $flag = 3 Then
$jour = "Mercredi"
ElseIf $flag = 4 Then
$jour = "Jeudi"
ElseIf $flag = 5 Then
$jour = "Vendredi"
ElseIf $flag = 6 Then
$jour = "Samedi"
ElseIf $flag = 7 Then
$jour = "Dimanche"
Else
$jour = "Introuvable"
EndIf
EndFunc ;==>_Jour
Si le flag n'est pas dans la liste, alors $jour est sera "Introuvable".
Maintenant, faisons Return pour terminer avant EndFunc :
Faisons un test :
Normalement, nous avons "Mercredi" :
C'était un tutoriel de MrDynoland pour apprendre a crée des flags !
-------------
Dernière edit :
Correction.
Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 11:44
par moi
super merci pour le tuto^^
mais tu devrais corriger ton titre : [TUTO] Créez un système de "flag" pour vos fonctions !
sinon ton sujet risque de finir dans la poubelle pour non respect des règles de présentation d'un message...

Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 12:54
par Tlem
Puisque nous sommes dans la section tutoriels, il serait bien de montrer le bon exemple de méthode d'écriture d'un code.
Pour cela, j'ai quelques remarques à faire :
- Respecter l'idintation du code. Suite4AutoIt3 vous y aide si vous utilisez la séquence CTRL+ALT+T
- Dans votre premier exemple, vous utilisez une variable dans une condition If sans l'avoir déclarée auparavant => Grossière erreur
- Dans votre deuxième exemple, vous utilisez une succession de conditions If, alors que l'utilisation de Switch ou Select serait bien plus approprié pour la clarté du code.
Enfin, pour finir, dans l'exemple présent, plutôt que de définir une nouvelle variable, pourquoi ne pas tout simplement redéfinir la variable $flag ?
Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 14:04
par Iste
Tlem a écrit :Enfin, pour finir, dans l'exemple présent, plutôt que de définir une nouvelle variable, pourquoi ne pas tout simplement redéfinir la variable $flag ?
Ha bah non ! Si tu veux donner le bon exemple on fait pas ce genre de cochonnerie
Par contre, je rajouterai un gros bémol, ici ce n'est pas un flag qui est présenté, mais un simple paramètre. Un flag c'est un paramètre spécial, une variable qui en contient plusieurs autres. Pour cela, on se sert des différent chiffres de la valeur binaire de la variable comme de boolean true/false 1/0
Exemple :
$var = 45
binaire = 101101
soit flag 1 + 4 + 8 + 32 =
45 le compte est bon.
C'est assez utilisé car peu gourmand en ressource (même si en autoit on s'en fiche un peu) tout en restant très claire
Exemple :
_maFonction($JOUR + $MOIS + $ANNEE)
peut être une fonction qui affiche le jour, le mois ou l'année voir les 3, en fonction d'un flag.
Pour retrouver ces valeurs, il faut jouer avec des masques a coup de AND
Exemple :
imaginons notre fonction d'affichage jour mois années :
$flag = 101
$flag AND 001 = 001 => on affiche le jour
$flag AND 010 = 000 => on affiche pas le mois
$flag AND 100 = 100 => on affiche l'année.
Donc, pour généraliser
Si $flag AND $param = $param Alors on effectue le travail.
Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 15:19
par servabat
Arghh mais ce n'est pas du tout comme cela qu'il faut faire

!
Déja, on utilise pas des if/endif comme ça, il faut mettre if/elseif/elseif/endif ou switch/case/case/endswitch.
Voici un exemple de fonction a flag :
Code : Tout sélectionner
func mafonction($flag)
Switch $flag
case mod($flag, 2) = 0
;action
case mod($flag, 3) = 0
;action
;etc
EndSwitch
Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 17:02
par MrDynoland
Je me suis servi du If pour qu'un débutant puissent comprendre.
Et je me rend compte d'une autre erreur, si on met 1,0 ... Dans ce genre, un Else aurait pus prendre place.
Excusez moi encore !
J'ai corriger.
Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 17:06
par matwachich
Excusez moi c'est pas pour faire le méchant, mais ce tuto est un peut inutile et vraiment basique!
Voila un vrai système de flags:
Code : Tout sélectionner
Enum Step *2 $FLAG_ON = 1, $FLAG_OFF, $FLAG_AUTRE
; le Step *2 n'est pas la que pour faire jolie!
_Func($FLAG_ON)
_Func($FLAG_AUTRE)
_Func($FLAG_OFF + $FLAG_AUTRE)
_Func()
Func _Func($flag = 0)
Local $on = False, $off = False, $autre = False
; ---
; Attention, pas de select ou de switch, car ceux-ci ne testerai qu'un seul flag
If BitAND($flag, $FLAG_ON) Then _
$on = True
If BitAnd($flag, $FLAG_OFF) Then _
$off = True
If BitAnd($flag, $FLAG_AUTRE) Then _
$autre = True
; ---
ConsoleWrite("Etat des flags:" & @CRLF)
ConsoleWrite("ON: " & $on & @CRLF)
ConsoleWrite("OFF: " & $off & @CRLF)
ConsoleWrite("AUTRE: " & $autre & @CRLF)
; ---
ConsoleWrite("Et à partir de la, on fait nos actions..." & @CRLF)
ConsoleWrite("=========================================" & @CRLF)
EndFunc
Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 17:26
par MrDynoland
matwachich a écrit :Excusez moi c'est pas pour faire le méchant, mais ce tuto est un peut inutile et vraiment basique!
Voila un vrai système de flags:
Code : Tout sélectionner
Enum Step *2 $FLAG_ON = 1, $FLAG_OFF, $FLAG_AUTRE
; le Step *2 n'est pas la que pour faire jolie!
_Func($FLAG_ON)
_Func($FLAG_AUTRE)
_Func($FLAG_OFF + $FLAG_AUTRE)
_Func()
Func _Func($flag = 0)
Local $on = False, $off = False, $autre = False
; ---
; Attention, pas de select ou de switch, car ceux-ci ne testerai qu'un seul flag
If BitAND($flag, $FLAG_ON) Then _
$on = True
If BitAnd($flag, $FLAG_OFF) Then _
$off = True
If BitAnd($flag, $FLAG_AUTRE) Then _
$autre = True
; ---
ConsoleWrite("Etat des flags:" & @CRLF)
ConsoleWrite("ON: " & $on & @CRLF)
ConsoleWrite("OFF: " & $off & @CRLF)
ConsoleWrite("AUTRE: " & $autre & @CRLF)
; ---
ConsoleWrite("Et à partir de la, on fait nos actions..." & @CRLF)
ConsoleWrite("=========================================" & @CRLF)
EndFunc
Ma principal vocation est d'apprendre à progresser en aidant les autres, si tu y arrive, alors ce tutoriel n'est pas pour toi.
Sinon Tlem, pas besoin de variable au début car je la défini par la condition !

Re: Créez un système de "flag" pour vos fonctions !
Posté : lun. 08 août 2011 17:37
par Tlem
Iste a écrit :Ha bah non ! Si tu veux donner le bon exemple on fait pas ce genre de cochonnerie

A la relecture de mon message, je me suis rendu compte que je me suis mal exprimé.
A la base, je voulais indiquer l'utilisation directe de $flag pour gérer le retour :
ou
.
Mais malgré tout, l'utilisation de la variable envoyée en paramètre afin de modifier sa valeur est utilisé dans certaines conditions (Voir la première fonction (_ArrayAdd) de l'include Array.au3).
Et donc cette fois-ci, intentionnellement et littéralement : "plutôt que de définir une nouvelle variable, pourquoi ne pas tout simplement redéfinir la variable $flag ?"
Ceci dit, ce sujet effectivement n'est pas approprié, puisque comme il l'a été fait remarqué, dans l'utilisation de la définitions des paramètres d'une fonction AutoIt, un flag est un paramètre défini préalablement dans la fonction.
Généralement ce paramètre est initialisé par une valeur par défaut et est optionnel.
Je ne doute pas que d'autres rajouterons leur propre ressentiment, mais peut importe, puisque ce sujet n'a pas vraiment sa place ici, il sera déplacer dans les exemples de scripts.
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : jeu. 11 août 2011 03:22
par overflow
C est sur que le tuto a matwachich respire bon le code propre et pointu
mais quand tu commence juste l autoit c est vrai que c est pas le top ^^
tient aller j aime bien ca ^^
du Simple pour débuter
Code : Tout sélectionner
MsgBox(0,"",_jour(7)) ; chiffre de 1 a 7 ^^
Func _jour($arg)
$Day=StringSplit("Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche",",")
Return $Day[$arg]
EndFunc
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : jeu. 11 août 2011 15:18
par matwachich
Magnifiquement simple!
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : jeu. 11 août 2011 16:25
par Tlem
Il est clair qu'on peut toujours ré-inventer la roue !!!
Sachez que AutoIt intègre déjà des fonctions pour afficher la date en toute lettre. Si vous avez installé la pack AutoIt Fr (pour afficher les jours et mois en Français) alors ceci suffira :
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : jeu. 11 août 2011 18:35
par mikell
Tlem a écrit :Il est clair qu'on peut toujours ré-inventer la roue !!!
Oui bon certes mais il ne faisait que présenter un exemple simple, pour illustrer le concept de 'flag'
C'est vrai que ce n'est pas forcément évident, quand on débute, de différencier avec précision par la définition les termes variable, paramètre, flag...
et y a pas de définition de 'flag' dans l'aide

Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : jeu. 11 août 2011 22:16
par Tlem
Je répondrais oui et non sur le fait de présenter un exemple de ce qu'est un flag, car cette fonction (qui n'en est pas vraiment une) ne prend pas en compte certains cas : le zéro ou un nombre à virgule, ou un entier supérieur a sept ou encore une lettre ou chaîne de caractère.
Ça fait un peut beaucoup je trouve pour un exemple qui est sensé aider des débutants.
Quand à la définition de flag, je pense que cela pourrait être traduit par :
Flag = Option ou paramètre à choix multiples
Mais bon, flag est plus rapide.
L'idéal serait sans doute de faire une page spéciale sur le Wiki pour ce genre de traduction.
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : jeu. 11 août 2011 22:23
par MrDynoland
Tlem a écrit :Je répondrais oui et non sur le fait de présenter un exemple de ce qu'est un flag, car cette fonction (qui n'en est pas vraiment une) ne prend pas en compte certains cas : le zéro ou un nombre à virgule, ou un entier supérieur a sept ou encore une lettre ou chaîne de caractère.
Tu n'as pas relut le code après édition toi ! x)
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : jeu. 11 août 2011 23:23
par Tlem
Je parlais de l'exemple de overflow pas du votre.
Il faudrait suivre, hein ! ^^
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : ven. 12 août 2011 12:25
par MrDynoland
Mais ta phrase prend en compte mon ancien code puisque que c'était comme cela ! x)
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : ven. 12 août 2011 13:37
par Tlem
Hé bien non, il faut arrêter de psycoter.
Je repondais à mikell.
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : dim. 14 août 2011 11:53
par mikell
Tlem a écrit :Flag = Option ou paramètre à choix multiples
Mais bon, flag est plus rapide.
L'idéal serait sans doute de faire une page spéciale sur le Wiki pour ce genre de traduction.
Je suis bien d'accord, la lecture de ce sujet montre qu'une telle page serait bien utile
Flag = Option ou paramètre à choix multiples, faudrait insister sur le fait que les choix sont prédéfinis (dans la fonction ou en dehors) et éventuellement combinables (comme dans MsgBox)
En plus les exemples ici sont ou bien inappropriés avec simple variable au lieu de flag, ou comme vous disiez sans gestion des erreurs, ou alors trop compliqués pour vraiment aider un débutant
Re: [Ex] Créez un système de "flag" pour vos fonctions !
Posté : lun. 15 août 2011 22:54
par Iste
Et bien moi pas.
Ce que vous présentez depuis le début
ne sont pas des flags ! Seul le code de matwachich en présente.
Je suis désolé d’être pointilleux mais nous somme dans la partie d'exemples, alors autant donner le bon !
Voici un tres bon tuto sur les flag en général qui peut etre porté pour autoit :
http://www.siteduzero.com/tutoriel-3-32 ... flags.html
Pour un exemple réel de flag en autoit, voir ce post :
http://autoitscript.fr/forum/viewtopic. ... 362#p53362