les fonctions

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Leplayze

Frite...euse (jeu de mot)
V
Ancien staff
Dec 4, 2009
12,649
5
1,303
30
www.youtube.com
merci d'avance a bouh2 pour ce magnifique tutoriel

Bonjour,

Je pense que certains d'entre-vous ont encore du mal à organiser un code avec les fonctions
Je vais donc éclaircir ce point.

I. Utilité

Vous vous demander peut être à quoi cela sert ? Et bien c'est la base de la programmation, une notion extrêmement importante
Une fonction est un bout de code que le programme va "appeler". Il va l'exécuter.
Donc première chose cela permet d'aérer le code (très important) et aussi de ne pas récrire la même chose donc ainsi éviter de faire des fichiers avec 1000 lignes de codes alors que 100 en suffit

Mais ce n'est pas tout, on peut donner des arguments au fonctions lorsque elles sont appelé. Un argument est une valeur que l'on va "passer" à la fonction.
Celle-ci va créer un variable (elle gère ça tout seul) et cette variable prendra la valeur donné.
La fonction va travailler avec cette valeur pour donner des résultats différents
Cela empêche de faire des fonctions inutiles en trop
Et en plus de cela on peux définir un argument par défaut, c'est-à-dire qu'il n'est pas obligé d'appeler la fonction avec l'argument en question dans ce cas la variable associé aura la valeur par défaut défini.

Et enfin une dernière notion est celle de valeur retournée.
Cela sert à une part sortir de la fonction n'importe ou dans celle-ci et aussi (et surtout) à retournée une valeur, chose très importante.

Voici un exemple pour reprendre tout ce que j'ai dit
Je veux faire une fonction qui divise un nombre par 2 ou par 3
Je pourrais bien sûr éviter une fonction de la sorte qui n'est pas franchement utile, mais c'est un exemple ;)

Donc tout d'abords je ne vais devoir donner en argument la valeur à diviser et retourner le résultat.
Et je vais optimiser encore en faisant une seule fonction pour diviser par 2 ou par 3 en mettant un 2e arguments
Celui là sera en faite le diviseur qui sera par exemple 2 par défaut

II. Créer un fonction et l'appeler

En AutoIt on délimite une fonction par des balises. Voici la syntaxe

Code:
Func [Nom]([arg1],[arg2],...)
...
CODE ICI
...
Return 1 
EndFunc

Func défini le début d'une fonction, le nom est après celui-ci. Dans tout les cas il faut mettre les parenthèses, si il n'y a pas d'arguments il faut mettre () sinon il faut mettre le nom de la variable associés. Les arguments sont séparer par une virgule

Note : Le nombre d'arguments est théoriquement illimité

A la fin de la fonction il faut ajouté EndFunc. Il n'est pas nécessaire de mettre return dans chaque fonction, AutoIt sait quand il a atteint la fin de celle-ci.

Note : Il est tout à fait probable de renvoyer, une variable, un tableau, une valeur quelconque ou même l'appel d'une autre fonction.
return $var - valide
return 1 - valide
return "abc" - valide
return @error - valide
return Mod(2,4) - valide
return "ab" "ab" - invalide


Pour faire une fonction qui affiche un message dans une boîte de dialogue (MsgBox()) on ferrais simplement :

PHP:
AfficheMsgBox() ;on appelle la fonction

Func AfficheMsgBox()
MsgBox(0,"Appel de fonction", "La fonction a été appelée")
EndFunc

III. Les arguments

Les arguments sont défini entres les parenthèses de la fonction et sont séparés par une virgule.
On associe une variable à chacun d'eux.

Exemple avec une fonction d'addition

PHP:
Additionne(4,4)

Func Additionne($Args1, $Args2)
MsgBox(0,"Résultat", $Args1 & " + " & $Args2 & " = " & $Args1 + $Args2)
EndFunc

Note : J'utilise le nom de $Arg# pour les arguments, ce n'est qu'a titre d'exemple, n'importe qu'elle nom peut être donné à condition qu'il ne soit pas déjà pris. Il est même déconseillé de donner de nom de la sorte, ça empêche de savoir à quoi elle servent

Note : Le signe & permet de concaténer 2 chaînes de caractères (AutoIt transforme en général seul les valeurs en chaînes de caractères contrairement au C/C++, C#, Java...). Cela marche aussi pour concaténer 2 valeurs

Et si on veux ajouter un 3e argument mais sans qu'on soit obliger de le donner on fait :

PHP:
Additionne(4,4)
Additionne(4,4,2)

Func Additionne($Args1, $Args2, $Args3 = 0)
MsgBox(0,"Résultat", $Args1 & " + " & $Args2 & " + " & $Args3 &" = " & $Args1 + $Args2 + $Args3)
EndFunc

Note : Pour éviter d'afficher un '+' en trop il faudrait ajouter un If, mais ce n'est pas le but du tutoriel

IV. Retourné une valeur

Pour retourné une valeur n'importe où dans la fonction on utilise le mot clé 'return'
On ajoute la valeur à retourné derrière celui-ci

Exemple :

PHP:
Local $Value

MsgBox(0,"Valeur retourné", "''Additionne(4,4)'' retourne la valeur : " & Additionne(4,4))
MsgBox(0,"Valeur retourné", "''Additionne(4,4,2)'' retourne la valeur : " & Additionne(4,4,2))
$Value = Additionne(10, 10)
MsgBox(0,"Valeur de $Value", "$Value vaut : " & $Value)


Func Additionne($Args1, $Args2, $Args3 = 0)
Return $Args1 + $Args2 + $Args3
EndFunc

On peut aussi utiliser return pour stoper une fonction
Exemple avec la division par 0 :
PHP:
MsgBox(0,"Valeur retournée", "Retourne : " & Divide(4, 0))
MsgBox(0,"Valeur retournée", "Retourne : " & Divide(16, 4))

Func Divide($Args1, $Args2)
	If $Args2 = 0 Then Return "NaN"
	Return $Args1 / $Args2
EndFunc

Note : NaN signifie Not a Number (N'est pas un nombre)

La fonction retourne NaN si le diviseur est égale à 0 (division impossible) sinon elle continu et retourne le résultat

V. SetError() et @error pour prévenir des erreurs

Il existe un moyen plus propre pour rapporter des éventuels erreurs durant la fonction.
@error est une macro, une variable géré par AutoIt qui est défini lorsque une erreur est survenue
Pour définir @error il faut utiliser SetError()

SetError :
Code:
SetError ( code [, extended [, return value]] )

Note : Dans les définitions de fonctions les crochet ('[' et ']') dise que l'argument encadré n'est pas obligatoire. Il est défini par défaut.


On va juste utiliser le premier argument
Reprenons notre fonction de division, on va définir @error à 1 si la division est par 0 et à 2 si le diviseur et le dividende sont égale à 0
Après l'appel de la fonction on utilise un if pour savoir si il y a eu une erreur

PHP:
Local $Value

$Value = Divide(4, 0)
If @error Then
MsgBox(16, "Erreur", "Erreur survenu, @error vaut : " & @error)
Else
MsgBox(0, "Valeur retournée", "Retourne : " & $Value)
EndIf

$Value = Divide(0, 0)
If @error Then
MsgBox(16, "Erreur", "Erreur survenu, @error vaut : " & @error)
Else
MsgBox(0, "Valeur retournée", "Retourne : " & $Value)
EndIf

$Value = Divide(4, 2)
If @error Then
MsgBox(16, "Erreur", "Erreur survenu, @error vaut : " & @error)
Else
MsgBox(0, "Valeur retournée", "Retourne : " & $Value)
EndIf

Func Divide($Args1, $Args2)
	If $Args2 = 0 And $Args1 = 0 Then
		SetError(2)
		Return
	ElseIf $Args2 = 0 Then
		SetError(1)
		Return
	EndIf

	Return $Args1 / $Args2
EndFunc   ;==>Divide


Voilà c'est la fin du tutoriel