Création de ses propres fonctions personnalisées

Alors que Visual Basic accepte les procédures (Sub) et les fonctions (Function), ActionScript n'accepte que les Fonctions (Function)

Exemple de fonction réduite à sa plus simple expression

function Machin()
  {
  }

Elle ne fait rien, ne renvoie rien. Elle s'appelle Machin. C'est la structure minimale d'une fonction.

Attention : Une fonction ne peut se trouver or d'un on, ou onClipEvent d'un bouton ou d'un clip. Elle se trouve soit DANS un on, ou onClipEvent, ou alors directement sur une image-clé.

Dans le livre "La bible Micro Application Flash MX", ils déconseillent d'appeler une fonction qui n'a pas encore été "lue". En d'autres termes, en mettant les fonctions dans le calque que vous appellerez Actions, dans la première image, avant toute chose, ce problème est réglé :

Appel d'une fonction

Dans la première et unique image clé d'un unique calque que vous appellerez Actions, placez ce code :

function Truc()
  {
  Youpi = 44
  }
trace ("Youpi vaut : " + Youpi)
Truc()
trace ("Youpi vaut : " + Youpi)

Le résultat sera le suivant :

Youpi vaut : undefined
Youpi vaut : 44

La fonction est écrite avant le reste, certes, mais elle n'est pas exécutée pour la cause. Juste après, on essaie d'afficher la valeur d'une variable Youpi, qui est donc indéfinie. On appelle alors la fonction Truc, et juste après, en réaffichant la variable YOupi, on constate qu'elle a bien pris la valeur 44, assignée dans la fonction.

Attention : Si, par mégarde, vous avez deux fonctions de même nom, aucune erreur ne sera générée :

function Truc()
  {
  Youpi = 1
  }
function Truc()
  {
  Youpi = 2
  }

trace ("Youpi vaut : " + Youpi)
Truc()
trace ("Youpi vaut : " + Youpi)

Résultat :

Youpi vaut : undefined
Youpi vaut : 2

Retour de fonction

Une fonction peut renvoyer une valeur. Exemple :

function NombrePi()
  {
  return 3.14
  }
trace (NombrePi())

Renvoie 3.14

S'il y a plus d'un return dans la fonction, celle-ci s'arrête sans poser de question au premier return, point barre. Par exemple :

function UnChiffre()
  {
  return 6
  Bille = 33
  return 7
  }
trace (UnChiffre())
trace (Bille)

Dès que return 6 est atteint, la fonctiuon se termine, et donc, Bille n'est pas assignée à la valeur 33. Voici le résultat :

6
undefined

Sensibilité Majuscules/minuscules

Attention : Les fonctions sont sensibles à la cassse :

function NombrePi()
  {
  return 3.14
  }
trace (NombrePi())
trace (NOMBREpi())

Renverra :

3.14
undefined

Sans pour autant générer une erreur, d'ou danger !

Passage de paramètres

Il suffit de mettre une variable entre parenthèses, comme ceci :

function Truc(Machin)
  {
  }

Pour l'appel de la fonction, c'est comme ceci :

Truc (33)

33 va se transférer dans le paramètre Machin.

Retour d'une fonction avec paramètre

function Truc(Machin)
  {
  return Machin + 1
  }
trace(Truc(33))

Affichera :

34

Et si on omet le paramètre, il n'y a pas d'erreur, simplement la variable/paramètre Machin reste vide ::

function Truc(Machin)
  {
  return Machin + 1
  }
trace(Truc())

Affichera :

Nan

On peut ainsi mettre autant de paramètres qu'on veut :

function Truc(Machin, Bidule, Bazar, Tralala)
  {
  return Machin + Bazar
  }
trace(Truc(22.5, "Marcel", 23*2))

Affichera :

68.5

Typage des paramètres et du retour

Dans la page "Les variables", je parle du typage strict.

La fonction suivante double le paramètre :

function Doubler(Truc)
  {
  return Truc * 2
  }
trace (Doubler (33)) // affiche 66
trace (Doubler ("Tralala")) // affiche Nan

AFin de générer une erreur, plus parlante pour le programmeur, on peut utiliser le typage strict :

function Doubler(Truc:Number)
  {
  return Truc * 2
  }
trace (Doubler (33))
trace (Doubler ("Tralala"))

Cette fois, c'est la ligne trace (Doubler ("Tralala")) qui pose problème. En effet, ActionScript se fâche à l'exécution :

**Erreur** Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 7 : Incompatibilité de types.
trace (Doubler ("Tralala"))

Et pour s'assurer que le retour de la fonction est un nombre et pas autre chose (return Truc * 2), on peut aussi "TypageStricter" le retour :

function Doubler(Truc:Number):Number
  {
  return Truc * 2
  }
var AAA:Number
var BBB:String
AAA = Doubler(44)
BBB = Doubler(44) // C'est CA qui pose problème.

**Erreur** Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 8 : Incompatibilité de types dans l'instruction d'affectation : Number détecté au lieu de String.
BBB = Doubler(44)

Passage d'un objet comme paramètre

  1. Créez un petit carré, ou un petit cercle sur la première et unique image-clé d'un calque unique d'une nouvelle animation
  2. Convertissez votre oeuvre en symbole clip : CLICarre (Dans les propriétés, faites bien attention à ce que ce soit bien écrit CLICarre)
  3. Dans cette première image (pas sur le clip donc, sur l'image clé qui contient le clip), écrivez :

trace (CLICarre._X)

Vous obtiendrez l'affichage de la position horizontale en pixels de votre clip. Dans mon cas, c'est 158.

Essayez maintenant ceci :

function DonnePosition (QuelObjet)
  {
  return QuelObjet._x
  }
trace (DonnePosition(CLICarre))

Va afficher la même valeur. Voyez : on peut envoyer un clip en paramètre, et la fonction peut traiter ses propriétés.

---