ProgrammazioneSviluppatore Backend

Che cosa sono le funzioni infix in Kotlin, come dichiararle e utilizzarle correttamente, quali sono i limiti? Fai un esempio di creazione di una propria funzione infix e parla delle insidie.

Supera i colloqui con l'assistente IA Hintsage

Risposta.

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

Come dichiarare una funzione infix:

  • La funzione deve essere un metodo di una classe/funzione di estensione.
  • Avere esattamente un parametro.
  • Dichiarata con il modificatore infix.
  • Non consente l'uso di vararg e valori predefiniti per il parametro.

Esempio:

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

Vantaggi:

  • Aumento della leggibilità, soprattutto per calcoli o catene di chiamate.
  • Applicabile per costruire collezioni, verificare condizioni (ad esempio, x to y).

Limiti e insidie:

  • Infix è disponibile solo per metodi con UN solo parametro obbligatorio.
  • La priorità di esecuzione dell'infix è inferiore a quella degli operatori di confronto e degli operatori aritmetici (il che a volte porta a sorprese con la priorità delle operazioni).
  • La funzione infix non funziona con parametri predefiniti e vararg.

Domanda trabocchetto.

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

Esempi di errori reali a causa della mancanza di conoscenza delle sfumature dell'argomento:


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.