Fonction infix — c'est une fonction qui peut être appelée sous forme infixe (sans point ni parenthèses), ce qui améliore la lisibilité du code. Ces fonctions sont pratiques, par exemple, pour créer des DSL (domain-specific languages).
infix.Exemple :
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
Peut-on utiliser une fonction infix avec plusieurs paramètres ou avec des paramètres par défaut ?
Réponse : Non, on ne peut pas. Une fonction infix peut avoir exactement un paramètre obligatoire sans valeur par défaut et sans vararg.
Exemple de déclaration incorrecte :
// Erreur ! infix fun foo(a: Int, b: Int) { }
Histoire
Dans le projet, on a essayé de mettre en œuvre une fonction infix pour remplacer les appels des fonctions builder par des expressions infixes plus lisibles. En raison de l'ignorance des limites sur le nombre de paramètres, la fonction a été déclarée avec deux paramètres — les étudiants ont longtemps eu du mal à comprendre pourquoi la compilation échouait.
Histoire
Le développeur a utilisé des expressions infixes dans une grande expression arithmétique sans parenthèses, pensant que la priorité des opérations était la même que celle des opérateurs mathématiques traditionnels. En conséquence, les expressions étaient calculées différemment de ce qui était attendu — il a fallu réécrire avec des parenthèses explicites.
Histoire
À l'intérieur d'une collection, un paring a été réalisé via infix ("item to value") et appliqué lors du nesting, mais en raison d'une mauvaise compréhension de la syntaxe, deux appels infixes imbriqués n'ont pas fonctionné — seul l'attribution de paire au niveau supérieur a fonctionné, les paires imbriquées ont été ignorées, ce qui a entraîné la perte de données significatives.