Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !

Des fonctions particulières

Les expressions lambda et les fonctions d’ordre supérieur

1. Qu’est-ce qu’une expression lambda ?

Une expression lambda est une fonction anonyme qui permet d’écrire du code de manière très concise. Une fonction anonyme étant une fonction qui n’a ni nom, ni droit d’accès, ni type de retour. L’objectif d’une expression lambda est de passer des traitements en paramètre d’une méthode.

2. Écrire une expression lambda

Écrire une expression lambda est très simple. Il convient d’indiquer, d’un côté, les paramètres de la fonction anonyme qui compose l’expression lambda, en les séparant par une virgule, et de l’autre côté, le traitement à appliquer à ces paramètres. Ces deux parties qui composent l’expression lambda sont séparées par l’opérateur ->, et le tout vient entre accolades.

Soit une expression lambda qui accepte deux paramètres : un nom sous la forme d’une chaîne de caractères et un âge sous la forme d’un entier. L’objectif de cette expression lambda est d’afficher dans le terminal "Je m’appelle [...] et j’ai [...] ans". Chaque "trou" étant complété par le bon paramètre.

{name: String, age: Int -> println("Je m'appelle $name et j'ai 
$age ans") } 

Il n’est pas obligatoire de passer des paramètres à une expression lambda. Dans ce cas, la partie gauche de l’expression est absente. Par exemple, cette expression lambda ne fait qu’afficher une simple phrase dans le terminal :

println("Hello!") } 

Dans la partie "traitement" de l’expression lambda, Kotlin ne nous limite pas à une seule instruction. Il est tout à fait possible d’écrire plusieurs instructions. 

{ name: String, age: Int ->  
  println("Salut !" 
  println("Je m'appelle $name et j'ai $age ans") 
  println("À plus !") 
} 

Tout comme dans une fonction classique, il est également possible de renvoyer un résultat. Il n’est pas nécessaire d’utiliser...

Les fonctions de portée

L’un des avantages du langage Kotlin, comme de nombreux langages de programmation modernes, est de proposer aux développeurs des fonctions qui facilitent la manipulation des éléments du langage, comme les variables, les attributs de classe, etc.

Dans ce chapitre, nous allons voir cinq fonctions très utiles que l’on appelle les fonctions de portée.

1. Qu’est-ce qu’une fonction de portée ?

Ces fonctions, que nous allons utiliser en combinaison avec les expressions lambda (voir le chapitre Les expressions lambda et les fonctions d’ordre supérieur), permettent de définir une portée (scope) dans laquelle il est possible de manipuler des objets sans avoir besoin de les nommer.

Dans ce chapitre, nous passerons en revue cinq fonctions de portée : let, with, run, apply et also.

Pour savoir comment les utiliser, il est important de comprendre ce qui les différencie des autres fonctions, à savoir la façon dont on fait référence en leur sein à l’objet que l’on souhaite manipuler et leur valeur de retour.

2. Manipuler un objet dans une fonction de portée

Les cinq fonctions de portée en question s’utilisent sur un objet. Pour manipuler l’objet sur lequel elles s’appliquent, on emploie l’un de ces deux mots-clés : it et this.

Nous verrons cependant que le mot-clé it peut être personnalisé et que le mot-clé this n’est pas toujours strictement nécessaire.

Parce que les fonctions with, run et apply permettent de manipuler directement l’objet sur lequel elles s’appliquent, elles demandent le mot-clé this.

Parce que les fonctions let et also, quant à elles, permettent de manipuler l’objet sur lequel elles s’appliquent en tant qu’attribut de l’expression lambda, elles demandent le mot-clé it.

3. Retourner un résultat dans une fonction de portée

Ces cinq fonctions de portée renvoient un résultat. Cependant, elles ne renvoient pas toutes le même type de résultat. Les fonctions apply et also retournent l’objet manipulé en leur sein tandis que les fonctions with, run et let retournent le résultat de l’expression lambda, soit sa dernière instruction. ...

En résumé

  • Une expression lambda est une fonction anonyme qui permet d’écrire du code de manière concise.

  • Une fonction anonyme est une fonction sans nom, ni droit d’accès, ni type de retour.

  • Une fonction d’ordre supérieur est une fonction acceptant en argument une fonction.

  • La fonction passée en argument d’une fonction d’ordre supérieur s’exprime sous la forme d’une expression lambda.

  • Il est possible et conseillé d’optimiser les fonctions d’ordre supérieur grâce au mot-clé inline.

  • Les fonctions de portée permettent de limiter la portée d’une variable et de manipuler plus facilement des objets dans certains cas.

  • Les fonctions de portée sont au nombre de cinq : let, with, run, apply et also.

  • La fonction de portée let a deux utilités : limiter la portée d’un bloc de code et s’assurer de la manipulation d’un objet non null.

  • La fonction de portée with facilite un enchaînement d’instructions sur un objet.

  • La fonction de portée run a deux utilités : limiter la portée d’un bloc de code et faciliter un enchaînement d’instructions sur un objet tout en renvoyant un résultat.

  • La fonction de portée apply facilite l’initialisation d’un objet.

  • La fonction de portée also est principalement utilisée...