Funzione infix — è una funzione che può essere chiamata in forma infix (senza punto e parentesi), il che aumenta la leggibilità del codice. Queste funzioni sono utili, ad esempio, per la creazione di DSL (linguaggi specifici del dominio).
infix.Esempio:
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
È possibile utilizzare una funzione infix con più parametri o con parametri predefiniti?
Risposta: No, non è possibile. La funzione infix può avere esattamente un parametro obbligatorio senza valore predefinito e senza vararg.
Esempio di dichiarazione errata:
// Errore! infix fun foo(a: Int, b: Int) { }
Storia
Nel progetto si cercava di implementare una funzione infix per sostituire le chiamate delle funzioni builder con espressioni infix più leggibili. A causa della mancanza di conoscenza del limite sul numero di parametri, la funzione è stata dichiarata con due parametri — gli studenti non riuscivano a capire perché la compilazione non passava.
Storia
Un sviluppatore utilizzava espressioni infix in una grande espressione aritmetica senza parentesi, pensando che la priorità delle operazioni fosse la stessa degli operatori matematici tradizionali. Di conseguenza, le espressioni venivano calcolate in modo diverso da quanto atteso — è stato necessario riscrivere esplicitamente con parentesi.
Storia
All'interno di una collezione è stata implementata la parificazione tramite infix ("item to value") e utilizzata all'interno del nesting, tuttavia a causa di una comprensione errata della sintassi, due chiamate infix annidate non hanno funzionato — ha funzionato solo l'assegnazione della coppia a livello superiore, le coppie annidate sono state ignorate, portando alla perdita di dati significativi.