Quand une expression a un intérêt en soi et est susceptible d'être utilisée à plusieurs occasions, il est préférable d'en faire une fonction. Cette notion fondamentale a ainsi été le premier dispositif de réutilisation des programmes. La définition d'une fonction exprime la dépendance d'une expression par rapport à des paramètres. Une fois définie, une fonction peut être utilisée, ou invoquée en l'appliquant à une liste d'arguments.
Par exemple, considérer l'expression 7#7 comme dépendant de 8#8 conduit à définir une fonction 9#9, avec la notation mathématique usuelle :
static int s(int m) { return m*(m+1)/2; }
La définition d'une fonction comporte un en-tête et un corps. Ici, l'en-tête est static int s(int m). Il est composé :
return m*(m+1)/2;
.
En Java, la définition d'une fonction doit figurer dans une classe, elle-même membre d'un paquet. Voici un exemple complet, comportant un paquet, deux classes et trois fonctions. Le paquet exemples contient les deux classes Sommes et SommesTest. La classe exemples.Sommes comporte les deux fonctions, sommerEntiers et sommer : la première invoque la seconde et elle est invoquée plusieurs fois par la fonction principale de la classe exemples.SommesTest:
package exemples; class Sommes { // somme des entiers de min à max static int sommerEntiers(int min, int max) { return sommer(max) - sommer(min-1); } // somme des entiers de 1 à m static int sommer(int m) { return m*(m+1)/2; } } class SommesTest { public static void main(String[] args) { System.out.println("Somme de 1 à 10 = " + Sommes.sommerEntiers(1, 10)); System.out.println("Somme de 1 à 100 = " + Sommes.sommerEntiers(1, 100)); System.out.println("Somme de 1 à 1000 = " + Sommes.sommerEntiers(1, 1000)); } }
L'effet de ce programme est d'afficher à l'écran :
Somme de 1 à 10 = 55 Somme de 1 à 100 = 5050 Somme de 1 à 1000 = 500500
Le texte compris entre « // » et la fin de la ligne est un commentaire : inutilisables par la Machine Virtuelle Java, les commentaires facilitent la compréhension des programmes.
La définition d'un paquet comporte
La définition d'une classe comporte
Les en-têtes des fonctions ci-dessus sont respectivement :
Le corps de la fonction suit son en-tête et est placé entre accolades. Sauf quand le type de retour est void, le corps d'une fonction contient au minimum une instruction de la forme « return expression; » qui permet de communiquer son résultat. Quand le type de retour est void, son corps peut contenir l'instruction « return; », mais ce n'est pas obligatoire, comme le montrent les exemples précédents de fonction principale. Une fonction dont le type de retour est void est parfois appelée une procédure.
Le corps d'une fonction peut comporter d'autres instructions qu'un
return. Par exemple, la fonction main comporte
plusieurs instructions de la forme System.out.println("...")
;
d'autres formes d'instruction seront vues au § 2.2.