Référence Mot-clé


Func...Return...EndFunc

Définit une fonction-utilisateur qui prend zéro ou plusieurs arguments et retourne facultativement un résultat.

Func functionName ( [Const] [ByRef] $param1, ..., [Const] [ByRef] $paramN, $optionalpar1 = value, ...)
    ...
    [Return [value]]
EndFunc

Paramètres

Les paramètres sont définis par vous. Vous appellerez plus tard la fonction comme n'importe qu'elle autre fonction interne.

Remarques

Les noms de variable et de fonction sont insensibles à la casse, par conséquent SomeFunc() est la même fonction que SoMEFunC().

Le mot-clé Const est optionnel et indique que la valeur du paramètre ne changera pas durant l'exécution de la fonction. Une variable déclarée Const peut seulement être passée à une fonction en utilisant un paramètre Const.

Le mot-clé ByRef indique que le paramètre devrait être traité comme une référence à l'objet original. Par défaut le paramètre est copié dans une nouvelle variable, mais ByRef lie la nouvelle variable à l'original. Notez qu'il n'y a pas que les variables nommées qui peuvent être passées par un paramètre ByRef - les variables temporairement sans nom, comme les valeurs retournées par une fonction, peuvent aussi bien être passées comme paramètres ByRef. Cependant, un littéral ne peut pas être transmis à un paramètre ByRef. ByRef doit être utilisé lors du passage de grandes quantités de données (telles que le contenu d'un fichier) où copier toutes les données imposerait une pénalité de performance significative. Un autre avantage est que le passage d'un paramètre ByRef, lorsque la fonction est destinée à modifier le contenu du paramètre, dispense de retourner la valeur modifiée puisque l'original est directement modifié.

La déclaration d'un paramètre à la fois ByRef et Const est utile quand la variable d'origine contient beaucoup de données qui doivent rester inchangées, aussi AutoIt retournera une erreur si la fonction tente de la modifier par inadvertance. L'ordre des mots-clés n'est pas important, tant qu'ils sont tous les deux devant le paramètre qu'ils modifient.

Des tableaux entiers peuvent être passés aux fonctions (et elles peuvent les retourner) en utilisant simplement le nom du tableau sans aucune parenthèse. Les tableaux doivent être passés aux fonctions définies par l'utilisateur en utilisant le mot-clé ByRef afin d'éviter la copie de toutes les données. Notez que AutoIt copie un paramètre tableau seulement si le contenu a changé, aussi c'est seulement dans ce cas que ByRef offre un avantage, bien qu'il soit recommandé de l'utiliser dans tous les cas.

Les paramètres facultatifs sont définis en leur assignant une valeur par défaut. La valeur peut être une variable globale, une macro ou une valeur littérale. Les paramètres facultatifs apparaissent toujours en derniers dans la définition d'une fonction. Tous les paramètres supplémentaires après le premier paramètre facultatif doivent aussi être facultatifs. À l'intérieur de la fonction, le nombre de paramètres donnés lorsque la fonction a été appelée peut être retrouvé avec la macro @NUMPARAMS (voir l'exemple 2).

Utilisez le mot-clé Return pour quitter la fonction. À la différence des fonctions internes, les fonctions définies par l'utilisateur retournent 0 à moins qu'une autre valeur de retour ne soit spécifiée. L'utilisation de Return avec SetError() permet de retourner les valeurs @error et @extended aussi bien qu'une valeur.

Notez que les déclarations de fonction ne peuvent pas apparaître à l'intérieur d'autres déclarations de fonction.

En relation

Const, Global/Local, #include

Exemples

Exemple 1

#include <Date.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Exemple de script avec trois fonctions définies par l'utilisateur
    ; Notez l'utilisation de variables, ByRef, et Return

    Local $iFoo = 2
    Local $iBar = 5
    MsgBox($MB_SYSTEMMODAL, "", " Aujourd'hui on est le " & today() & @CRLF & "$iFoo est égal à " & $iFoo)
    Swap($iFoo, $iBar)
    MsgBox($MB_SYSTEMMODAL, "", "Après échange de $iFoo et $iBar:" & @CRLF & "$iFoo contient maintenant " & $iFoo)
    MsgBox($MB_SYSTEMMODAL, "", "Finalement:" & @CRLF & "Le plus grand de 3 et 4 est " & max(3, 4))
EndFunc   ;==>Example

Func Swap(ByRef $vVar1, ByRef $vVar2) ; Echange le contenu de deux variables
    Local $vTemp = $vVar1
    $vVar1 = $vVar2
    $vVar2 = $vTemp
EndFunc   ;==>Swap

Func today() ; Retourne la date actuelle au format jj/mm/aaaa
    Return (@MON & "/" & @MDAY & "/" & @YEAR)
EndFunc   ;==>today

Func max($x, $y) ;Retourne le plus grand des deux nombres
    Return ($x > $y ? $x : $y)
EndFunc   ;==>max


Exemple 2

#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Exemple de script utilisant la macro @NumParams
    Test_Numparams(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
EndFunc   ;==>Example

Func Test_Numparams($vVar1 = 0, $vVar2 = 0, $vVar3 = 0, $vVar4 = 0, $vVar5 = 0, $vVar6 = 0, $vVar7 = 0, $vVar8 = 0, $vVar9 = 0, _
        $vVar10 = 0, $vVar11 = 0, $vVar12 = 0, $vVar13 = 0, $vVar14 = 0, $vVar15 = 0, $vVar16 = 0, $vVar17 = 0, $vVar18 = 0, $vVar19 = 0)
    #forceref $vVar1, $vVar2, $vVar3, $vVar4, $vVar5, $vVar6, $vVar7, $vVar8, $vVar9, $vVar10
    #forceref $vVar11, $vVar12, $vVar13, $vVar14, $vVar15, $vVar16, $vVar17, $vVar18, $vVar19
    Local $sVal = ""
    For $i = 1 To @NumParams
        $sVal &= Eval("vVar" & $i) & " "
    Next
    MsgBox($MB_SYSTEMMODAL, "", "@NumParams = " & @NumParams & @CRLF & @CRLF & $sVal)
EndFunc   ;==>Test_Numparams