Les interfaces fonctionnelles
La problématique des instanciations anonymes des interfaces
Pour implémenter une interface, il existe au moins deux solutions : faire implémenter l’interface par une classe, ou bien créer une instance de l’interface grâce aux classes anonymes (voir le chapitre Les interfaces).
Revenons sur cette seconde solution.
Soit un programme très simple, composé d’une interface contenant une unique méthode. Ce programme contient également une fonction qui accepte en paramètre l’interface.
L’interface se nomme Callback, et son unique méthode onSuccess. Cette méthode accepte en paramètre un nombre entier. L’interface et son unique méthode permettent de réaliser un post-traitement. L’interface est donc passée en paramètre d’une autre fonction qui appelle la méthode onSuccess quand elle a terminé de travailler.
Voici l’implémentation Kotlin du programme :
interface Callback
{
fun onSuccess(result: Int)
}
fun main()
{
work(object : Callback
{
override fun onSuccess(result: Int)
{
println("result: $result")
}
...
Écrire une interface fonctionnelle
Une interface fonctionnelle est une interface que l’on peut implémenter sous la forme d’une expression lambda.
Pour déclarer une interface fonctionnelle, il suffit d’ajouter le mot-clé fun juste avant le mot-clé interface.
Pour rendre fonctionnelle l’interface Callback, on la déclare donc ainsi :
fun interface Callback
{
fun onSuccess(result: Int)
}
Maintenant que l’interface Callback est une interface fonctionnelle, l’appel à la fonction work peut être grandement simplifié sans changer la méthode work écrite dans la précédente section. En effet, l’instanciation de l’interface via une classe anonyme peut être remplacée par une expression lambda. Le paramètre result devient, quant à lui, accessible via le mot-clé it :
fun main()
{
work { println("result: $it") }
}
La modification permet d’économiser de nombreuses lignes de code. Grâce à l’utilisation des interfaces fonctionnelles, nous retrouvons bien ce qui fait le succès du langage Kotlin : une syntaxe claire.
Il n’est cependant pas possible de transformer une interface classique en interface fonctionnelle systématiquement. Pour être...
En résumé
-
Une interface fonctionnelle est une interface pouvant être utilisée sous la forme d’une expression lambda.
-
Une interface fonctionnelle se déclare à l’aide du mot-clé fun.
-
Une interface peut être fonctionnelle si et seulement si elle possède une unique méthode abstraite.