ProgrammierungBackend Entwickler

Was sind Infix-Funktionen in Kotlin, wie werden sie deklariert und richtig verwendet, welche Einschränkungen existieren? Geben Sie ein Beispiel für die Erstellung einer eigenen Infix-Funktion und erklären Sie die Stolpersteine.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

Infix-Funktion — das ist eine Funktion, die in infix-Form (ohne Punkt und Klammern) aufgerufen werden kann, was die Lesbarkeit des Codes verbessert. Solche Funktionen sind zum Beispiel praktisch für die Erstellung von DSLs (domain-specific languages).

Wie man eine Infix-Funktion deklariert:

  • Die Funktion muss eine Methode einer Klasse/Erweiterungsfunktion sein.
  • Sie muss genau einen Parameter haben.
  • Wird mit dem Modifikator infix deklariert.
  • Es ist nicht erlaubt, vararg und Standardwerte für den Parameter zu verwenden.

Beispiel:

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

Vorteile:

  • Verbesserung der Lesbarkeit, insbesondere bei Berechnungen oder Methodenverkettungen.
  • Anwendbar für den Aufbau von Sammlungen, Überprüfungen von Bedingungen (zum Beispiel x to y).

Einschränkungen und Stolpersteine:

  • Infix ist nur für Methoden mit EINEM obligatorischen Parameter verfügbar.
  • Die Ausführungspriorität von Infix liegt unterhalb der von Vergleichsoperatoren und arithmetischen Operatoren (was manchmal zu Überraschungen bei der Priorität von Operationen führt).
  • Infix-Funktion funktioniert nicht mit Standardparametern und vararg.

Fangfrage.

Kann man eine Infix-Funktion mit mehreren Parametern oder mit Standardparametern verwenden?

Antwort: Nein, das ist nicht möglich. Eine Infix-Funktion kann genau einen obligatorischen Parameter ohne Standardwert und ohne vararg haben.

Beispiel für eine ungültige Deklaration:

// Fehler! infix fun foo(a: Int, b: Int) { }

Beispiele für echte Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas:


Geschichte

Im Projekt versuchten sie, eine Infix-Funktion zu implementieren, um Aufrufe von Builder-Funktionen durch lesbarere Infix-Ausdrücke zu ersetzen. Aufgrund des mangelnden Wissens über die Beschränkung der Parameteranzahl wurde die Funktion mit zwei Parametern deklariert – die Studenten konnten lange nicht verstehen, warum die Kompilierung fehlschlug.


Geschichte

Ein Entwickler verwendete Infix-Ausdrücke in einem großen arithmetischen Ausdruck ohne Klammern und glaubte, dass die Priorität der Operationen die gleiche sei wie bei traditionellen mathematischen Operatoren. Infolgedessen wurden die Ausdrücke nicht wie erwartet berechnet – es musste mit expliziten Klammern neu geschrieben werden.


Geschichte

Innerhalb einer Sammlung wurde das Pairing über Infix ("item to value") implementiert und innerhalb von Nesting verwendet, jedoch funktionierten aufgrund des Missverständnisses der Syntax zwei verschachtelte Infix-Aufrufe nicht – nur die Zuweisung des Paares auf oberster Ebene funktionierte, die verschachtelten Paare wurden ignoriert, was zu einem Verlust bedeutender Daten führte.