Les fonctions, comme les variables précédemment, sont des objets de base en programmation et que vous allez utiliser extrêmement fréquemment. Alors, autant savoir tout de suite ce que c'est !
Pour rappel, une variable associe un nom et une donnée. Eh bien, une fonction c'est l'association d'un nom et de logique – ou encore l'association d'un nom et de quelques lignes de code.
Prenons un exemple
Voici les lignes de code d'un petit jeu :
// Nous créons un héros
var heros = Heros()
heros.nom = "Jean Paul Le Héros"
heros.vie = 500
heros.attaque = 100
// Nous créons un méchant
var ennemi = Diable()
ennemi.nom = "Rémi La Souris qui fait peur"
ennemi.vie = 1000
ennemi.attaque = 30
// Nous combattons l'ennemi
ennemi.vie = ennemi.vie - hero.attaque // L'ennemi perd de la vie
heros.vie = heros.vie - ennemi.attaque // Le héros perd de la vie
Inutile de vous acharner à comprendre ces lignes. Les commentaires vous permettent de saisir ce qu'il se passe.
Nous avons deux problèmes :
Ce n'est pas facile à lire !
Si je veux attaquer à nouveau mon ennemi, il va falloir que je recopie les deux lignes correspondantes correctement. Il n'est pas près de mourir…
Les fonctions vont nous permettre d'y voir plus clair. Pour créer une fonction, rien de plus simple ! Il suffit de suivre la syntaxe suivante :
func creerHeros() {
}
On écrit le mot clé
func
.On écrit le nom de la fonction (on choisit ce qu'on veut !).
On rajoute des parenthèses ().
On ouvre et on ferme des accolades.
Il ne reste plus qu'à écrire le code à l'intérieur des accolades :
// Cette fonction permet de créer un héros
func creerHeros() {
var heros = Heros()
heros.nom = "Jean Paul Le Héros"
heros.vie = 500
heros.attaque = 100
}
Bon super, mais dans l'histoire on a rallongé le code…
Pour l'instant ! Car maintenant, si on veut créer un héros, il ne nous reste plus qu'à appeler la fonction comme ceci :
creerHeros()
En écrivant simplement le nom de la fonction et les parenthèses, l'ordinateur comprend qu'il doit exécuter toutes les lignes suivantes :
var heros = Heros()
heros.nom = "Jean Paul Le Héros"
heros.vie = 500
heros.attaque = 100
En créant de la même façon les fonctions creerMechant
et attaquer
, le code initial devient :
creerHeros()
creerMechant()
attaquer()
D'une part, c'est beaucoup plus court et, d'autre part, c'est beaucoup plus simple à lire ! Et en plus, si je veux attaquer plusieurs fois, je n'ai qu'à écrire :
attaquer()
attaquer()
attaquer()
Ça devient presque violent notre histoire… :pirate:
Donc, en résumé, les fonctions sont immensément pratiques pour simplifier la lecture de notre code et son utilisation. Elles permettent d'encapsuler des lignes de code et de les associer au nom de son choix pour être réutilisées ensuite.
En résumé, pour les déclarer :
func leNomDeMaFonction() {
// Ici on écrit le code
}
Et pour les utiliser :
leNomDeMaFonction()
À vous de jouer !
On refait le même exercice ? Et si vous deviez déclarer une fonction qui s'appelle changeQuote
, qu'écririez-vous ?
// Allez jouer le jeu sans tricher !
// |
// |
// |
// |
// |
// |
// |
// |
// |
// |
// |
// |
// |
// |
// |
// Vous n'êtes pas en train de tricher quand même ?
// |
// |
// |
// |
// |
// |
// |
// |
// |
// Et hop !
func changeQuote() {
}
Félicitations à tous ceux qui ont cherché !
Il n'y a pas de grande différence avec ce qu'avait généré Xcode pour nous :
@IBAction func changeQuote() {
}
Xcode rajoute juste le mot clé @IBAction
pour savoir que cette fonction peut faire l'objet d'une connexion avec un élément de l'interface (IBAction : Interface Builder Action).
Une action, c'est donc une connexion entre un élément de l'interface et une fonction, associée à un évènement !
Bon, c'est bien formidable tout ça, mais il s'agit désormais de tester cette action.
La fonction print
Une fonction pour en tester une autre ! Je vous présente la fonction print
. Cette fonction permet d'écrire des choses dans la zone de débogage.
La zone de débogage ?
Hmm… Je vois qu'on s'est planqué au fond de la classe et qu'on a pas tout suivi…
Pas grave, voici une image qui devrait vous remettre les choses en tête :
Ça fait tilt ?! Parfait !
Pour utiliser cette fonction, il faut lui passer un paramètre. Un paramètre est une des possibilités qu'ont les fonctions et que nous détaillerons dans le prochain cours. Sachez seulement que ça s'écrit entre les parenthèses de notre fonction.
Par exemple, cela donne avec la fonction print :
@IBAction func changeQuote() {
print("Youpi ! Notre action fonctionne parfaitement !")
}
Cliquez sur Run (ou cmd + r). L'application se lance. Vous pouvez contrôler que la zone de débogage est vide. Maintenant, cliquez sur le bouton "ET MOI ?". Et vous devriez voir ceci apparaître dans la console (la partie droite de la zone de débogage). Evidemment, cela s'affiche autant de fois que vous cliquez sur le bouton :
Bravo ! Notre bouton est bien relié à la fonction changeQuote
et nous allons maintenant pouvoir modifier le contenu de cette fonction pour faire fonctionner notre application !
En résumé
Les fonctions :
Les fonctions permettent d'encapsuler des lignes de code et de les associer au nom de son choix pour pouvoir être réutilisées ensuite.
Pour créer une fonction, on utilise le mot clé
func
.
Maintenant que nous avons notre outlet et notre action créée, nous allons rajouter de la logique à notre application en exécutant du code dans notre action.