Java : les variables et les paramètres
Portée de variables, copie et références.
Variables primitives
int maVar; maVar = 12;
Les fonctions et la portée des variables
Les fonctions doivent être considérées comme des boites noires, indépendantes.
Une fonction peut bien sûr en appeller une autre, voire s'appeller elle même, mais les variables qu'elle manipule sont indépendantes à chacun des appels.
- Le seul moyen de passer des valeurs à une fonction est d'utiliser ses paramètres (passage de valeur de la fonction appellante vers la fonction appellée).
- Le seul moyen de sortir une valeur d'une fonction est d'utiliser return (passage de valeur de la fonction appellée vers la fonction appellante).
C'est la signature de la fonction qui précise les éventuels parametres et leur type, ainsi que le type de retour.
public static void main(String[] args){ int monAge=19; boolean estMajeur = estMajeurFR(monAge); //boolean estMajeur = estMajeurJP(monAge); } public static boolean estMajeurFR(int age) { int limite = 18; boolean result; if (age >= limite) { result = true; } else { result = false; } return result; } public static boolean estMajeurJP(int age) { int limite = 20; boolean estMajeur; if (age >= limite) { estMajeur = true; } else { estMajeur = false; } return result; }
Les fonctions doivent être considérées comme des boites indépendantes. Chaque boite peut déclarer toutes les variables qu'elle veut, sans se soucier de ses voisines. L'unicité des noms de variable doit être vérifiée dans le cardre d'une boite. On parle de contexte.
A noter que la fonction main est une fonction tout à fait normale, avec des parametres et sans valeur de retour. Sa seule particularité est qu'elle est appellée automatiquement au lancement du programme.
Lorsqu'une fonction est appellée, on ne connait rien d'elle, à part le type des parametres qu'elle attends, s'il y en a, et le type de la valeur qu'elle va nous retourner.
Tout le reste est caché. En particulier le nom du ou des parametres n'a aucune importance ici, ce qui est important c'est la valeur qu'on lui passe et qui lui sera copiée.
Classes et passage par référence
Grace aux classes, Java nous permet de rassembler plusieurs éléments dans un seul pour représenter une entité de notre programme.
Une classe est un ensemble de variables et de méthodes attachées (méthode = fonction attachée à une classe).
class Personnage { public String nom; public int pv; public boolean encoreVivant(){ // return ... } public boolean estPlusFort(Personnage autrePerso){ // return ... } }
La variable recoit la valeur de cette référence, pas l'instance elle même.
Personnage p1 = new Personnage(); p1.nom = "Gandalf"; p1.pv = 20; Personnage p2 = new Personnage(); p2.nom = "Balrog"; p2.pv = 25;
Plusieurs variables peuvent pointer vers la meme instance.
C'est le cas par exemple lorsqu'on passe en parametre une variable d'instance (= non primitive) à une fonction.
p1.estPlusFort(p2);