Fonctions

Exemple de fonction

  class MaClasse {
    public static int carre(int i) {
      return i*i;
    }

    public static void main(String[] args) {
      int x = 3;

      System.out.println(carre(x));
    }
  }

Passage par valeur

  public class PassageParValeur {
    public static void echange(int i, int j) {
      // i et j : copies locales
      // Toute modification ne change QUE i et j au sein
      // de cette fonction
      int tmp = i;
      i = j;
      j = tmp;
    }

    public static void main(String[] args) {
      int a = 1, b = 2;

      // Java fait une copie de a, une copie de b,
      // et passe ces copies à la fonctions. Quoique
      // la fonction fasse, à la ligne 19, a et b
      // ne seront pas modifiés
      echange(a, b);

      // a et b ne sont pas modifiés
      System.out.printf("a: %d, b: %d%n", a, b);
    }
  }

Passage par référence

  public class PassageParReference {
    public static void miseAuCarre(int[] tableau) {
      // Néanmoins, toute modification des objets référencés,
      // elle, se reflétera dans la fonction appelante.
      for (int i = 0; i < tableau.length; i++) {
        tableau[i] = tableau[i] * tableau[i];
      }
    }

    public static void main(String[] args) {
      int[] a = { 1, 2, 3 };

      miseAuCarre(a);

      // le CONTENU de a est modifié
      System.out.printf("a: %s%n", Arrays.toString(a));
    }
  }

Récursivité

  public static void somme(int i) {
    if(i == 0) {
      return 0;
    }

    return i + somme(i - 1);
  }

Overloading

  class NomClasse {
    // pour les String
    public static int longueur(String s) {
      return s.length();
    }

    // Pour les entiers
    public static int longueur(int i) {
      String si = String.valueOf(i);
      return si.length();
    }

    public static void main(String[] args) {
      int k = 12345;
      int lk = longueur(k); // lk vaut 5
      String s = "oui";
      int ls = longueur(s); // ls vaut 3
    }
  }

Variadic arguments (varags)

  class VarArgs {
    public static int max(int... nombres) {
      int currentMax = Integer.MIN_VALUE;
      for(int i: nombres) {
        if(currentMax < i) {
          currentMax = i;
        }
      }

      return currentMax;
    }

    public static void main(String[] args) {
      max();
      max(1, 2, 4);
      max(5, 8, 42, 0);
    }
  }