Qu’est-ce qu’un littéral de fonction dans Scala?

Qu’est-ce qu’un littéral de fonction dans Scala et quand dois-je les utiliser?

Un littéral de fonction est une syntaxe alternative pour définir une fonction. Il est utile lorsque vous souhaitez transmettre une fonction en tant qu’argument à une méthode (en particulier un ordre supérieur comme un pli ou une opération de filtrage), mais vous ne voulez pas définir une fonction distincte. Les littéraux de fonction sont anonymes – ils n’ont pas de nom par défaut, mais vous pouvez leur donner un nom en les liant à une variable. Un littéral de fonction est défini comme suit:

(a:Int, b:Int) => a + b 

Vous pouvez les lier à des variables:

 val add = (a:Int, b:Int) => a + b add(1, 2) // Result is 3 

Comme je l’ai déjà dit, les littéraux de fonction sont utiles pour transmettre des arguments à des fonctions d’ordre supérieur. Ils sont également utiles pour définir des fonctions à une seule ligne ou des fonctions d’assistance nestedes dans d’autres fonctions.

Un tour de Scala donne une assez bonne référence pour les littéraux de fonctions (ils les appellent des fonctions anonymes).

Il pourrait être utile de comparer les littéraux de fonction à d’autres types de littéraux dans Scala. Les littéraux sont des sucres de notation pour représenter les valeurs de certains types que la langue considère comme particulièrement importants. Scala a des littéraux entiers, des littéraux de caractères, des littéraux de chaîne, etc. Scala traite les fonctions comme des valeurs de première classe représentables dans le code source par des littéraux de fonction. Ces valeurs de fonction habitent un type de fonction spécial. Par exemple,

  • 5 est un littéral entier représentant une valeur dans le type Int
  • 'a' est un littéral de caractère représentant une valeur de type Char
  • (x: Int) => x + 2 est un littéral de fonction représentant une valeur dans Int => Int type de fonction Int => Int

Les littéraux sont souvent utilisés comme valeurs anonymes, c’est-à-dire sans les limiter à une variable nommée en premier. Cela permet de rendre le programme plus concis et approprié lorsque le littéral n’est pas destiné à être réutilisable. Par exemple:

 List(1,2,3).filter((x: Int) => x > 2) 

contre.

 val one: Int = 1 val two: Int = 2 val three: Int = 3 val greaterThan2: (Int => Int) = (x: Int) => x > two List(one,two,three).filter(greaterThan2)