Fonctions en Kotlin

Introduction aux Fonctions

Les fonctions sont un élément fondamental de n'importe quel programme Kotlin. Elles représentent des blocs de code réutilisables qui peuvent être appelés à divers endroits dans le programme. Il est important de noter qu'un programme Kotlin doit impérativement commencer avec la fonction main(), sans quoi une erreur se produira. Pour définir une fonction en Kotlin, on utilise le mot-clé fun, mais il existe également plusieurs fonctions prédéfinies comme println et print.

La Fonction Principale

La fonction main() constitue le point d'entrée d'un programme écrit en Kotlin et elle est indispensable. La fonction main() doit englober le code du programme, et elle n’est pas appelée par d’autres fonctions. Le code doit se trouver entre les accolades {} de la fonction main().

fun main() {  println("Bonjour le monde")}

Création de Fonctions en Kotlin

Les fonctions définies par l'utilisateur débutent par le mot-clé fun, suivent du nom de la fonction, des paramètres (le cas échéant), et enfin, du corps de la fonction qui est enfermé entre des accolades.

fun nomDeFonction(arguments): typeDeRetour {
  corps
  return statement
}

Les Paramètres

Les paramètres représentent les données transmises à la fonction. Chaque paramètre doit avoir un nom et un type de données. Un deux-points : sépare le nom du paramètre de son type de données. Les paramètres sont séparés par une virgule , .

fun nomDeFonction(paramNom: typeDeDonnee, paramNom2: typeDeDonnee) {
  corps
}

fun exemple(num1: Int, num2: Int) {  println(num1 + num2) }

Appel de Fonction avec Paramètres

Lors de l'appel d'une fonction, les arguments peuvent être placés selon leur position respective ou précisés par leur nom. Par exemple, si on précise les noms, l'ordre dans lequel ils figurent n’a pas d'importance.

fun main() {
  println(exemple(3, 5))
  println(exemple(numNom2=5, numNom1=3))
}

Valeurs par Défaut pour les Paramètres

Les paramètres peuvent avoir des valeurs par défaut, définies avec le signe égal =.

fun parDefaut(nom: String = "Kotlin") {  println("Bonjour $nom") }

fun main() {  parDefaut("Java") } // Affiche: Bonjour Java

Type de Retour

Le type de retour indique le type de valeur renvoyée par la fonction. L'inclusion du type de retour est optionnelle et s'écrit après la parenthèse et un deux-points : . Par défaut, la valeur de retour est de type Unit, ce qui signifie qu'il n'y a pas de valeur retournée.

fun exemple(nom: String): String {  return "Bonjour " + nom }

fun main() {  print(exemple("Tom")) } // Affiche: Bonjour Tom

Corps de Fonction

Le corps de la fonction contient le code à exécuter et doit être placé entre des accolades {}. Il doit être indenté, sauf pour une fonction de ligne unique, où l'accolade ouvrante { se trouve à la fin de l'en-tête de la fonction et l'accolade fermante } se trouve après la dernière ligne de code du corps.

fun nomDeFonction(param) {
  ligneCorps2
}

Instruction de Retour

Si la fonction utilise une instruction de retour, elle doit également déclarer un type de retour. L'instruction de retour est instaurée avec le mot-clé return. Toute ligne de code suivant l'instruction de retour ne sera pas exécutée.

fun addition(num1: Int, num2: Int): Int {
  var somme = num1 + num2  // Instruction de retour
  return somme  // println ne sera pas exécuté
  println("Bien joué")
}

Fonction de Ligne Unique

Une fonction de ligne unique peut être écrite si elle a une seule expression. On peut simplifier le code en enlevant les accolades {} et l'instruction de retour, et en utilisant un égal =.

fun surface(cote1: Int, cote2: Int): Int = cote1 * cote2

Littéraux de Fonction

Une fonction devient un littéral de fonction lorsqu'elle est assignée à une variable. On distingue deux types de littéraux de fonction : les "expressions lambda" et les "fonctions anonymes".

Expressions Lambda

Une expression lambda est une fonction compacte entourée d'accolades {}. L'instruction retour est remplacée par ->. Il n'est pas obligatoire d'écrire le type de retour car le compilateur peut l'inférer de l'interface de type.

fun main() {
  // Expression Lambda
  val additionner = {num1: Int, num2: Int -> num1 + num2}
  // Exécution
  println(additionner(1, 2))
} // Affiche: 3

Fonction Anonyme

Une fonction anonyme est assignée à une variable et le fun suivant le signe égal = indique qu'elle n'a pas de nom.

Conclusion

Il existe plusieurs manières de définir et d'utiliser des fonctions en Kotlin, que ce soit à travers des fonctions classiques, des expressions lambda, ou des fonctions anonymes. Chaque méthode a ses propres utilisations et avantages.