PPT

publicité
Les fonctions
en Java
Partie I
Le type void
Dans cette rapide présentation, je vais expliquer :
.à quoi servent les fonctions
.à quoi faut-il penser avant d’écrire une
fonction,
.comment déclarer et utiliser une fonction,
.comment se déroule l’appel à une fonction
dans un programme.
Les
fonctions
(ou
sous-programmes)
permettent de regrouper des instructions qui
sont
utilisées
programme.
plusieurs
fois
dans
un
Par exemple,
imaginons
que
l’on
souhaite
nombre à une certaine puissance.
53 = 5 x 5 x 5
calculer
un
En Java, on ferait
public class Main
{
public static void main (String[] args)
{
int cpt, result;
result = 1;
for (cpt = 1; cpt <= 3; cpt =
cpt+1)
{
result = result*5;
}
System.out.println(result);
}
}
Si on souhaite afficher aussi 94, on fera...
public class Main
{
public static void main (String[] args)
{
int cpt, result;
result = 1;
grandes similarités
for (cpt = 1; cpt <= 3; cpt =
dans le code
{
ici et
cpt+1)
result = result*5;
}
System.out.println(result);
result=1;
for (cpt = 1; cpt <= 4; cpt =
cpt+1)
{
result = result*9;
}
System.out.println(result);
}
On remarque de
là
Pour éviter de dupliquer le code, on va écrire
une fonction qui décrira les instructions à
suivre pour calculer un entier n élevé à une
puissance p.
A quoi réfléchir avant d’écrire une fonction ?
Avant d’aller plus loin, il faut se poser une
première question :
De quoi ma fonction a-t-elle besoin pour
effectuer son travail ?
ou autrement dit
De quelles valeurs ma fonction ne peut pas
décider par elle-même ?
Dans un téléphone portable, il existe une fonction
(un sous programme) permettant d’envoyer des
SMS à vos correspondants.
Pour marcher, cette fonction a besoin :
La fonction d’envoi
de SMS
a donc besoin de deux
.d’un message
à envoyer
données d’entrée (on dit deux paramètres) : un
.d’un destinataire à qui l’envoyer
message et un numéro à qui envoyer le message.
Ce n’est pas à la fonction de décider du contenu du
message ni de la personne à qui l’envoyer.
Pour reprendre notre exemple,
la fonction qui calcule un entier élevé à une
certaine puissance a besoin :
.d’un entier n qui sera l’entier dont on calculera une
puissance,
.d’un entier p qui sera la puissance à laquelle sera élevée n.
Ce n’est pas à la fonction de décider des valeurs de p ou
de n.
Ecrire une fonction en Java
On doit écrire une fonction qui prendra en
entrée deux entiers n et p, et affichera à l’écran
n p.
Pour écrire la fonction, on commencera par
écrire les mots clefs
Puis, on écrit
public static
void
(on verra à quoi sert ce
mot clef dans la seconde présentation).
Ensuite, donnez un nom à votre fonction : ici, on
appellera notre fonction
puissance
Enfin, écrivez toutes les données d’entrée dont
votre fonction a besoin, entre parenthèses.
Ici, cela donnera
public static void puissance (int n, int p)
{
Tout le code de la
fonction devra se trouver
entre ces deux accolades.
}
Puis on écrit le code de la fonction entre les deux
accolades.
Attention !
Lorsque l’on écrit le code de la fonction, on doit
considérer que les données d’entrée (ici, n et p) sont
déjà déclarées et initialisées.
Sauf cas spécial, n et p sont considérées comme étant
N’écrivez donc pas quelque chose comme ça ou ça
déjà déclarées et possèdent une valeur.
public static void puissance (int n, int p)
{
int n;
p = 4;
}
On peut maintenant écrire le code de la fonction :
public static void puissance (int n, int p)
{
int cpt, result;
result = 1;
for (cpt = 1; cpt <= p; cpt = cpt+1)
{
result = result*n;
}
System.out.println(result);
}
On place la fonction dans le fichier Main.java.
public class Main
{
ici
public static void main (String[] args)
{
int cpt, result;
result = 1;
La fonction doit être
placée à l’intérieur du
for (cpt = 1; cpt <= 3; cpt =
public class Main,
{
en
cpt+1)
result = result*5;
}
dehors
du
static void main.
System.out.println(result);
}
}
ou là
Ce qui donne …
public
public class Main
{
for (cpt = 1; cpt <= 3; cpt = cpt+1)
{
result = result*5;
}
System.out.println(result);
public static void puissance (int n,
int p)
{
int cpt, result;
result = 1;
result=1;
for (cpt = 1; cpt <= 4; cpt = cpt+1)
{
result = result*9;
}
System.out.println(result);
for (cpt = 1; cpt <= p; cpt =
cpt+1)
{
result =
result*n;
}
}
System.out.println(result);
}
public static void main (String[] args)
{
int cpt, result;
result = 1;
}
Remarquez que l’on a ici deux
fonctions :
.la fonction puissance
.la fonction main
Utiliser une fonction
Maintenant
que
l’on
a
écrit
la
fonction
puissance, on va l’utiliser afin de raccourcir la
fonction main.
Pour ce faire, il faut écrire le nom de la
fonction, suivi, entre parenthèses, des valeurs
à
transmettre
à
la
fonction
(l’ordre
est
important), et terminer par un point virgule.
Regardons la fonction main…
public static void main (String[] args)
{
int cpt, result;
result = 1;
}
On peut aussi passer des
variables comme
Remarque : l’ordre des
paramètre…
paramètres a une
for (cpt = 1; cpt <= 3; cpt = cpt+1)
{puissance(5,3);
result = result*5;
}
System.out.println(result);
importance.
Cette
partie sert à afficher 5
Cette partie permet
avait écrit
àSilaon
puissance
3.
d’afficher 9 à la puissance 4.
puissance(3,5), c’est 3 à la
result=1;
int a = 9;
for b(cpt
int
= 4;= 1; cpt <= 4; cpt = cpt+1)
{
puissance (a, b);
result = result*9;
}
System.out.println(result);
(nom
de la
fonction,
suivi
et b, qui
vaut
4.
des paramètres – ici, deux
puissance
5 qui
sera
affiché.
On
l’efface…
et
on
appelle
On l’efface, et on déclare
notre
fonction: a,
à la
deux entiers
quiplace
vaut 9,
entiers).
Puis on appelle la fonction
puissance.
Comment se passe l’appel à une fonction dans
un programme ?
Reprenons notre code général
5 4
3
9
public class Main
{
public static void puissance (int n,
int p)
{
int cpt, result;
result = 1;
for (cpt = 1; cpt <= p; cpt =
cpt+1)
{
result =
result*n;
}
System.out.println(result);
}
public static void main (String[] args)
{
puissance (5, 3);
int a = 9;
int b = 4;
puissance (a, b);
Java
Java doit
se rend
exécuter
alors àcompte
nouveau
qu’il
la
Comment
se déroule
l’exécution
Puis, Java exécute la fonction
fonction
doitceexécuter
puissance.
de
code
? la fonction
puissance,
Une
fois arrivé
de laàpremière
la fin de ligne
la
…
puissance.
le programme
est
Ilfonction
recopie main,
la valeur
de a dans n…
C’est
… jusqu’à
par lalafonction
dernière.main que
terminé.
et
la valeur
de b à
dans
Java
commence
lire p…
les lignes
Il recopie la valeur 5 dans n …
de code.
Une
fois la fonction
terminée,
(n vaudra
5 quand
la fonction
Java
revient
où il était, et
puissance
seralàexécutée)
Puis la fonction puissance est
Le
programme
débute donc
continue
son exécution
(n et par
p
exécutée (avec n=9, et p=4).
cette
de code.
sont «ligne
effacés
»).
…et il recopie la valeur 3 dans p
(p vaudra 3 quand la fonction
Puisfois
Java
continue
la fonction
Une
la sera
fonction
terminée,
puissance
exécutée).
main,
jusqu’ici
Java
revient
là où il était.
Dernières précisions
On vient de voir que lorsqu’une fonction est appelée, les
paramètres d’entrée sont recopiés dans la fonction.
public class Main
{
public static void puissance (int n,
int p)
{
……
}
public static void main (String[] args)
{
int a = 9;
int b = 4;
puissance (a, b);
}
Ici, lors de l’appel à la fonction
puissance, a est recopié dans n,
et b est recopié dans p.
}
Si on modifie la valeur de n ou de p dans la fonction
puissance, ça n’aura aucune influence sur a ou b.
Pour les tableaux, c’est différent : les tableaux sont
transmis à la fonction.
Si on possède une fonction où un tableau est donné
en paramètre d’entrée, et que l’on modifie ce
tableau
dans
la
fonction,
les
changements
resteront après que la fonction soit terminée.
Ceci est expliqué plus en détail dans la présentation
sur les attributions de valeur.
Autre chose : Si on possède des variables avec le
même nom dans des fonctions différentes, Java
considère ces variables comme des entités différentes.
public class Main
{
public static void puissance (int n,
int p)
{
int puissance_a
a = 3;
= 3;
…
}
public static void main (String[] args)
{
int main_a
a = 9; = 9;
….
}
}
Ici, les deux variables a sont
vues comme deux variables
différentes et séparées.
Tout se passe comme si ceci
était en réalité écrit…
Pour terminer, sachez que vous avez tout à
fait le droit d’appeler une fonction dans une
autre fonction…
Téléchargement