[Ex] Créez un système de "flag" pour vos fonctions !

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
MrDynoland
Niveau 3
Niveau 3
Messages : 33
Enregistré le : dim. 12 juin 2011 11:02
Status : Hors ligne

[Ex] Créez un système de "flag" pour vos fonctions !

#1

Message 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 :

Code : Tout sélectionner

Func _Jour($flag)
    
EndFunc   ;==>_Jour
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 :

Code : Tout sélectionner

Return $jour
Faisons un test :

Code : Tout sélectionner

MsgBox(64, "Example", "On est " & _Jour(3))
Normalement, nous avons "Mercredi" :
Image

C'était un tutoriel de MrDynoland pour apprendre a crée des flags !
-------------
Dernière edit :
Correction.
Modifié en dernier par MrDynoland le lun. 08 août 2011 17:25, modifié 4 fois.
Avatar du membre
moi
Niveau 7
Niveau 7
Messages : 370
Enregistré le : sam. 09 juil. 2011 22:14
Localisation : devant sont ordinateur
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#2

Message 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... :(
le problème ce n'est pas un problème, le seul problème ici c'est nous.

j'aime NYAN CAT Image
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#3

Message 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 ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#4

Message 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 :o

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.
Signez ici
servabat
Niveau 4
Niveau 4
Messages : 69
Enregistré le : sam. 02 avr. 2011 16:26
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#5

Message par servabat »

Arghh mais ce n'est pas du tout comme cela qu'il faut faire :o !

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
MrDynoland
Niveau 3
Niveau 3
Messages : 33
Enregistré le : dim. 12 juin 2011 11:02
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#6

Message 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.
Modifié en dernier par MrDynoland le lun. 08 août 2011 17:16, modifié 2 fois.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#7

Message 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
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
MrDynoland
Niveau 3
Niveau 3
Messages : 33
Enregistré le : dim. 12 juin 2011 11:02
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#8

Message 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 ! :D
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Créez un système de "flag" pour vos fonctions !

#9

Message par Tlem »

Iste a écrit :Ha bah non ! Si tu veux donner le bon exemple on fait pas ce genre de cochonnerie :o
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 :

Code : Tout sélectionner

Case $flag = 1
     Return "Lundi"
ou

Code : Tout sélectionner

Case 1
     Return Lundi
.

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). :roll:
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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#10

Message 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
 
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#11

Message par matwachich »

Magnifiquement simple!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#12

Message 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 :

Code : Tout sélectionner

#Include <Date.au3>
MsgBox(0, "", _DateDayOfWeek(@WDAY))
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#13

Message 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 :?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#14

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
MrDynoland
Niveau 3
Niveau 3
Messages : 33
Enregistré le : dim. 12 juin 2011 11:02
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#15

Message 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)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#16

Message par Tlem »

Je parlais de l'exemple de overflow pas du votre.
Il faudrait suivre, hein ! ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
MrDynoland
Niveau 3
Niveau 3
Messages : 33
Enregistré le : dim. 12 juin 2011 11:02
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#17

Message par MrDynoland »

Mais ta phrase prend en compte mon ancien code puisque que c'était comme cela ! x)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#18

Message par Tlem »

Hé bien non, il faut arrêter de psycoter.
Je repondais à mikell.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#19

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [Ex] Créez un système de "flag" pour vos fonctions !

#20

Message 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
Signez ici
Répondre