| A C C E U I L | S O M M A I R E |
| <-- A.10 : Les tableaux ( II ) | B.1 : Fonctions (II) : Exercices sur l'écriture des fonctions --> |
Immaginez un programme informatique dans lequel il arrive qu' on écrive un ensemble d' instructions de 10 lignes (parfois bien plus). Imaginez
ensuite que cet ensemble d' instructions se retrouvent jusqu' à 10 fois (parfois, bien plus) dans le même programme. Parce qu' on veut exécuter
10 fois ces instructions. On a donc 100 lignes rien que pour cet ensemble d' instructions. Si ce n' est que ça, pas bien grage me direz-vous.
Un copier-coller résoudra le problème en 2 temps, 3 mouvements.
Imaginez maintenant que pour une raison quelconque, vous ayez envie de changer l' une (peut-être même plus) des lignes de cet ensemble
d' instructions. Vous serez bien obligé de faire ça une dizaine de fois. Sur un programme informatique de plus de 1 000 lignes par exemples, il
faudra les trouver ces instructions à changer. Même si votre programme est le plus aéré et le plus commenté (des lignes de commentaires) possible,
ce ne sera pas de tout repos. Et je me limite à un ensebles de 10 instructions 10 fois. Cela pourrait prendre des porprtions insoupçonnées dans
un grand logiciel commercial tel qu' un navigateur Internet ou le logiciel de gestion des vols d' une grande compagnie aérienne ou de gestion du
personnel d' une multi nationale tel que Google. Si vous êtes débutants en programmation, vous n' avez même pas idée de l' importance d' un
grand logiciel. Ne soyez pas étonné qu' on vous parle de 50 000 lignes de code.
La maintenance de ce logiciel peut rapidement devenir un travail de titan.
C' est pourquoi l' écriture des fonctions est primordiables en programmation. Par exemple, vous regroupez les 10 lignes (ou plus) d' instructions
dans une fonction. Puis vous utilisez simplement le nom de la fonction pour exécuter les 10 lignes. Exemple : lorsque vous écrivez
int a = Math.sqrt(b); . Vous untilisez une seule ligne pour invoquer la fonction Math.sqrt(). Mais dans la définition de cette fonction,
combien de lignes utilisées.Ici, on n' en sait rien. c' est une fonction prédéfinie par les créateurs de Java. On ne connaît pas le code.
Et lorsqu' il s' agit de changer quelques intructions, vous changez simplement ces quelques instructions que vous trouvez plus aisément grâce
à la déclaration de la fonction. Pas besoin de regarder parmi les 10 000 lignes de code pour changer 10 fois ces instructions.
Vous comprendrez mieux dans la 2ème partie des écritures de fonctions lorsque nous allons traiter 3 grands projets. Car l' écriture des premières
fonctions trop simples) ne vous fera pas voir leur importance. Il s' agit d' abord d' apprendre à les écrire
En attendant, commençons par voir comment écrire une fonction.
Rappel : Je fais encore une erreur de temps en temps en parlant de fonction au lieu de parler de méthode. Ce n' est pas encore très grave. En Programmation orientée Objet, on parlera exclusivement de méthode. Une fonction fournit toujours un résultat. Lorsque ce n' est pas le cas, on utilise le mot méthode. Une fonction est forcément une méthode. La réciproque n' est pas vraie.
EXERCICE 1
Ecrivons une fonction f qui, à tout nombre réel x, associe un nombre réel y = x2. Donc son carré
CORRECTION 1
En mathématiques, on écrira :
f : R --> R
x --> y = x2
En java, on fera :
1. public static double f(double x)
2. {
3. double y = x * x;
4. return y;
5. }
En maths, R, ensemble de départ. R, ensemble d' arrivée. x appartient à R et y appartient R. R étant l' ensemble des nombres réels.
En java, lorsqu' on écrit une fonction ou une méthode, on commence par la déclarer. Voir ligne 1. Généralement, on déclare une méthode à l' aide
de 4 mots.
Le premier mot = public ou private ou protected. En P.O.O on utilisera l' un des trois mots. Surtout les deux derniers. Tant qu' on
n' est pas en P.O.O (programmation orientée objet), contentez-vous du mot public.
Ensuite, le deuxième mot est : static. En P.O.O, ce mot disparaît ou presque. En P.O.O, très peu de méthodes contiennent dans leur déclaration
le mot static. Je vous expliquerais mieux pourquoi le mot static lorsqu' il s' agira de ne plus l' utiliser. Donc, en P.O.O.
Le troisième mot est le type du résultat fournit par la méthode.
Le quatrième mot de la déclaration d' une méthode est forcément le nom de la méthode. Ici, la méthode s' appelle f.
Lorsque nous avons utilisé les méthodes prédéfinies (Notament, celles des classes Math et String), je vous ai parlé des méthodes qui fournissent
un résultat et celles qui n' en fournissent pas. Lorsqu' une méthode fournit un résultat, la dernière instruction de sa définition est forcément
return resultat; resultat étant le nom de la variable dont le contenu est le résultat fournit pas la méthode. La définition d' une
fonction, c' est l' ensemble des instructions de cette méthode. C' est donc l' ensemble des instructions qu' on voit entre les accolades
(ouverte et fermée) qu' on voit en dessous de la déclaration de cette méthode. Ici, la méthode f a comme définition, les lignes 3 et 4.
Revenons à la déclaration de la méthode. Le nom de la méthode est toujours suivie des parenthèses à l' intérieur desquelles on met on déclare les
paramètres éventuels.
PRECISONS :
La déclaration d' une variable est toujours suivie d' un point virgule. Exemple : int a; Pas celle d' une méthode. ligne 1
La déclaration des variables, paramètres d' une méthode, n' est jamais suivie de point virgule.
Les paramètres d' une méthode sont appelés les arguments ou paramètres muets. Muet parce qu' il n' y a pas de valeur. Tout comme on a écrit f
en mathématiques, il n' y a pas eu de valeur. On utilise des valeurs lorsqu' on veut l' image de x. Par ex, f(2.5) = 6.25
En java, j' utilise la fonction f en mettant son résultat dans une variable. Ex : double a = f(2.5); f(2.5) fournit la valeur
6.25. La variable a est ainsi affectée de la valeur 6.25.
Le nombre d' arguments d' une méthode peut être égal à zéro. Ce n' est pour ça qu' on supprimera les parenthèses. Le nom d' une méthode doit
doit toujours être suivi des parenthèses. Même lorsque l' on ne déclare pas la méthode. Par exemple, la méthode main() contient toutes les
instructions d' un programme.
Lorsqu' une méthode ne fournit aucun résultat, le troisième mot est void. Ce mot est anglais et veut dire vide. Mais prend surtout le sens de
rien en programmation. La méthode ne fournit rien, donc, void.
Autre chose : En math, R est l' ensemble des nombres réels. EN java, c' est le type double ou float. Mais quand on ne sait pas lequel choisir,
on prend double par défaut.
On dit aussi que le type de la variable retournée est aussi le type de la méthode. Ainsi, la méthode main() est toujours de type void. D' où
la déclaration : public static void main(String [] args).
EXERCICE 2
Ecrire une fonction qui à tout couple de nombres réels (x, y), associe le nombre réel z = xy. Le profuit de x par y.
CORRECTION 2
En mathématiques, on écrira :
f : R x R --> R
(x, y) --> y = xy
En java, on fera :
1. public static double f(double x, double y)
2. {
3. double z = x * y;
4. return z;
5. }
Si j' utilise cette fonction dans la méthode main() par exemple, je ferais : double a = f(2.2, 3.1); Et la valeur 6.82 sera affectée à la
variable a.
Conseil : Donnez toujours à votre méthode, un mot significatif. Un mot qui donne des indications sur ce que fait la méthode. Sur les deux
premiers exempls, j' ai voulu passer des maths à la programmation.
Autre notion de vocabulaire. Lorsqu' on dit qu' une méthode fournit un résultat, on peut aussi dire que la méthode renvoie un résultat ou encore
que la méthode retourne un résultat. C' est le mot retourner qui est d' ailleurs utilisé en java. Le mot clé return veut justement dire retourner.
| A C C E U I L | S O M M A I R E |
| <-- A.10 : Les tableaux ( II ) | B.1 : Fonctions (II) : Exercices sur l'écriture des fonctions --> |