ProgrammationDéveloppeur Backend

Qu'est-ce que les fonctions infixes en Kotlin, comment les déclarer et les utiliser correctement, quelles sont les limitations ? Donnez un exemple de création d'une propre fonction infix et parlez des pièges.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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).

Comment déclarer une fonction infix :

  • La fonction doit être une méthode de classe ou une fonction d'extension.
  • Avoir exactement un paramètre.
  • Se déclare avec le modificateur infix.
  • N'accepte pas l'utilisation de vararg et de valeurs par défaut pour le paramètre.

Exemple :

infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15

Avantages :

  • Amélioration de la lisibilité, surtout pour les calculs ou les chaînes d'appels.
  • Applicable pour la construction de collections, la vérification des conditions (par exemple, x to y).

Limitations et pièges :

  • Infix est disponible uniquement pour les méthodes avec UN paramètre obligatoire.
  • La priorité d'exécution de l'infix est inférieure à celle des opérateurs de comparaison et des opérateurs arithmétiques (ce qui peut parfois entraîner des surprises concernant la priorité des opérations).
  • La fonction infix ne fonctionne pas avec des paramètres par défaut et vararg.

Question piège.

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) { }

Exemples d'erreurs réelles dues à méconnaissance des subtilités du sujet :


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.