Les fonctions en Java Partie I Le type void. Dans cette rapide présentation, je vais expliquer :.à...

Preview:

Citation preview

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 plusieurs fois

dans un programme.

Par exemple,

imaginons que l’on souhaite calculer un

nombre à une certaine puissance.

53 = 5 x 5 x 5

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;

for (cpt = 1; cpt <= 3; cpt = 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

grandes similarités

dans le code

ici et

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 :

.d’un message à envoyer

.d’un destinataire à qui l’envoyer

Ce n’est pas à la fonction de décider du contenu du

message ni de la personne à qui l’envoyer.

La fonction d’envoi de SMS a donc besoin de deux

données d’entrée (on dit deux paramètres) : un

message et un numéro à qui envoyer le message.

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 np.

Pour écrire la fonction, on commencera par écrire

les mots clefs public static

Puis, on écrit 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.

public static void puissance (int n, int p){

}

N’écrivez donc pas quelque chose comme ça

int n;

p = 4;

ou çaSauf cas spécial, n et p sont considérées comme

étant déjà déclarées et possèdent une valeur.

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{

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);}

}

La fonction doit être

placée à l’intérieur

du public class Main,

en dehors du public

static void main.

ici

ou làCe qui donne …

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){

int cpt, result;result = 1;

for (cpt = 1; cpt <= 3; cpt = 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);

}}

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;

for (cpt = 1; cpt <= 3; cpt = 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);

Cette partie sert à afficher 5

à la puissance 3.

On l’efface… et on appelle

notre fonction à la place

(nom de la fonction, suivi

des paramètres – ici, deux

entiers).

Remarque : l’ordre des

paramètres a une

importance.

Si on avait écrit

puissance(3,5), c’est 3 à la

puissance 5 qui sera

affiché.

puissance(5,3);

On peut aussi passer des

variables comme

paramètre…

Cette partie permet

d’afficher 9 à la puissance 4.

On l’efface, et on déclare

deux entiers : a, qui vaut 9,

et b, qui vaut 4.

int a = 9;int b = 4;

puissance (a, b);

Puis on appelle la fonction

puissance.

Comment se passe l’appel à une fonction dans

un programme ?

Reprenons notre code général

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);

}}

Comment se déroule l’exécution

de ce code ?

C’est par la fonction main que

Java commence à lire les lignes

de code.

Le programme débute donc par

cette ligne de code.

Java se rend alors compte qu’il

doit exécuter la fonction

puissance.

Il recopie la valeur 5 dans n …

(n vaudra 5 quand la fonction

puissance sera exécutée)

5

…et il recopie la valeur 3 dans p

(p vaudra 3 quand la fonction

puissance sera exécutée).

3

Puis, Java exécute la fonction

puissance, de la première ligne …

… jusqu’à la dernière.

Une fois la fonction terminée,

Java revient là où il était, et

continue son exécution (n et p

sont « effacés »).

Puis Java continue la fonction

main, jusqu’ici

Java doit exécuter à nouveau la

fonction puissance.

Il recopie la valeur de a dans n…

et la valeur de b dans p…

9 4

Puis la fonction puissance est

exécutée (avec n=9, et p=4).

Une fois la fonction terminée,

Java revient là où il était.

Une fois arrivé à la fin de la

fonction main, le programme est

terminé.

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 a = 3;…

}

public static void main (String[] args){

int a = 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…

public class Main{

public static void puissance (int n, int p)

{int puissance_a = 3;…

}

public static void main (String[] args){

int main_a = 9;….

}}

Pour terminer, sachez que vous avez tout à

fait le droit d’appeler une fonction dans une

autre fonction…

Recommended