Les mathématiciens ont leurs propres petites manières amusantes, donc au lieu de dire "alors nous appelons la fonction en la fpassant xcomme paramètre" comme diraient les programmeurs, ils parlent "d'appliquer la fonction fà son argument x".
En mathématiques et en informatique, Apply est une fonction qui applique des fonctions aux arguments.
Wikipédia
applysert à combler le fossé entre les paradigmes orientés objet et fonctionnels dans Scala. Chaque fonction dans Scala peut être représentée comme un objet. Chaque fonction a également un type OO: par exemple, une fonction qui prend un Intparamètre et renvoie un Intaura le type OO de Function1[Int,Int].
// define a function in scala
(x:Int) => x + 1
// assign an object representing the function to a variable
val f = (x:Int) => x + 1
Puisque tout est un objet dans Scala, vous fpouvez maintenant le traiter comme une référence à un Function1[Int,Int]objet. Par exemple, nous pouvons appeler une toStringméthode héritée de Any, cela aurait été impossible pour une fonction pure, car les fonctions n'ont pas de méthodes:
f.toString
Ou nous pourrions définir un autre Function1[Int,Int]objet en appelant la composeméthode fet en enchaînant deux fonctions différentes ensemble:
val f2 = f.compose((x:Int) => x - 1)
Maintenant, si nous voulons réellement exécuter la fonction, ou comme le dit le mathématicien "appliquer une fonction à ses arguments", nous appellerions la applyméthode sur l' Function1[Int,Int]objet:
f2.apply(2)
Écrire f.apply(args)chaque fois que vous voulez exécuter une fonction représentée comme un objet est la méthode orientée objet, mais ajouterait beaucoup d'encombrement au code sans ajouter beaucoup d'informations supplémentaires et il serait bien de pouvoir utiliser une notation plus standard, telle comme f(args). C'est là que le compilateur Scala intervient et chaque fois que nous avons une référence fà un objet fonction et écrivons f (args)pour appliquer des arguments à la fonction représentée, le compilateur se développe silencieusement f (args)à l'appel de méthode objet f.apply (args).
Chaque fonction dans Scala peut être traitée comme un objet et cela fonctionne également dans l'autre sens - chaque objet peut être traité comme une fonction, à condition d'avoir la applyméthode. De tels objets peuvent être utilisés dans la notation de fonction:
// we will be able to use this object as a function, as well as an object
object Foo {
var y = 5
def apply (x: Int) = x + y
}
Foo (1) // using Foo object in function notation
Il existe de nombreux cas d'utilisation où nous voudrions traiter un objet comme une fonction. Le scénario le plus courant est un modèle d'usine . Au lieu d'ajouter de l'encombrement au code à l'aide d'une méthode d'usine, nous pouvons nous applyopposer à un ensemble d'arguments pour créer une nouvelle instance d'une classe associée:
List(1,2,3) // same as List.apply(1,2,3) but less clutter, functional notation
// the way the factory method invocation would have looked
// in other languages with OO notation - needless clutter
List.instanceOf(1,2,3)
La applyméthode n'est donc qu'un moyen pratique de combler l'écart entre les fonctions et les objets dans Scala.