Elvis Operator: Was es ist, Syntax und Behandlung von null-Werten

Autor: IT Sectr Veröffentlicht: 2026-05-27 Lesezeit: 8 Min.

Elvis Operator ist ein binärer Operator, der den linken Operanden zurückgibt, wenn er nicht null ist, und andernfalls den rechten. Er wird als ?: in Kotlin, Groovy und einigen anderen Sprachen geschrieben. Laut der Kotlin Language Documentation, 2024 ist der Operator Teil des Null-Sicherheitssystems der Sprache und ermöglicht es, bedingte Konstrukte ohne Verlust der Lesbarkeit auf eine Zeile zu verkürzen. Im Gegensatz zu einem vollständigen if-else-Ausdruck wertet der Elvis Operator die rechte Seite nur aus, wenn die linke Seite null ist, was bei Verwendung teurer Standardausdrücke einen Leistungsvorteil bietet.

Wichtige Punkte

  • Elvis Operator — der ?:-Operator, der den ersten nicht-null Operanden von zwei zurückgibt
  • Null safety — der Hauptanwendungsbereich des Elvis Operator in Kotlin und anderen Sprachen
  • Syntax äußerst prägnant: val result = a ?: b, äquivalent zu if (a != null) a else b
  • Groovy verwendet dieselbe ?:-Syntax, Swift den ??-Operator, Dart verwendet ??
  • Logging über den Elvis Operator ist ein beliebtes Muster: val name = input ?: „default“

Was ist der Elvis Operator

Elvis Operator ist ein binärer Operator, der nach Elvis Presleys Frisur benannt ist. Das Symbol ?: erinnert visuell an das Gesicht des Sängers im Profil: Das Fragezeichen ist Auge und Kotelette, der Doppelpunkt ist der Mund. Der Operator nimmt zwei Operanden: Wenn der erste nicht null ist — wird er zurückgegeben, andernfalls der zweite. Dies ermöglicht es, eine vollständige if-else-Konstruktion durch einen einzigen kurzen Ausdruck zu ersetzen.

Ursprung des Namens

Der Name „Elvis Operator“ setzte sich in den Kotlin- und Groovy-Communitys durch und verbreitete sich dann auf Xtend und andere JVM-Sprachen. In Swift und Dart wird die analoge Konstruktion nil-coalescing operator genannt, ist aber funktional identisch. Die visuelle Assoziation mit Elvis Presley half dem Operator, eines der bekanntesten Symbole in der Syntax moderner Programmiersprachen zu werden.

Rolle bei der Null-Behandlung

Der Elvis Operator ist Teil des null safety-Systems, das NullPointerException (NPE) verhindert. Laut einer JetBrains-Studie von 2023 macht NPE 28% aller Ausnahmen in JVM-Produktionscode aus. Die Verwendung des Elvis Operators eliminiert NPE am Zuweisungspunkt vollständig und garantiert einen Standardwert. In Kombination mit dem sicheren Aufrufoperator ?. entsteht eine zuverlässige Kette ohne einen einzigen if-Block.

Elvis Operator Syntax in Kotlin

In Kotlin wird der Elvis Operator als ?: zwischen zwei Ausdrücken geschrieben. Wenn der linke Ausdruck nicht null ist — ist das Ergebnis gleich dem linken Ausdruck, andernfalls wird der rechte ausgewertet. Der rechte Ausdruck wird faul ausgewertet — nur wenn der linke Operand null ist, was bei Verwendung teurer Berechnungen oder API-Aufrufe für die Leistung wichtig ist.

kotlin
val name: String? = getUserName()
val displayName = name ?: "Guest"

fun getLength(str: String?): Int {
    return str?.length ?: 0
}

val config: Config? = loadConfig()
val timeout = config?.timeout ?: 30
println("Timeout: $timeout")

// Elvis with throw für erforderliche Parameter
val requiredId = nullableId ?: throw IllegalArgumentException("ID is required")

// Elvis with return für frühen Ausstieg
fun process(data: String?): Result {
    val safe = data ?: return Result.failure("No data")
    return processInternal(safe)
}

Kombination mit let ist ein häufiges Muster in Kotlin, bei dem der Elvis Operator einen Standardwert bereitstellt und let eine Aktion auf dem nicht-null Ergebnis ausführt. Dieser Ansatz ersetzt ganze if-else-Blöcke durch eine einzige Aufrufkette ohne Verlust der Lesbarkeit. Der Elvis Operator kann auch mit throw verwendet werden, um bei fehlendem erforderlichen Parameter gewaltsam abzubrechen — dies ist eine idiomatische Methode zur Validierung von Eingabedaten.

Elvis mit frühem Rückkehr aus einer Funktion

Ein häufiges Muster in Kotlin ist Elvis + return. Wenn der Wert null ist, gibt die Funktion sofort ein Ergebnis zurück oder wirft eine Ausnahme. Das Elvis-mit-return-Idiom wird oft in Datentransformationsfunktionen verwendet: val processed = rawData ?: return defaultValue. Dies ist kompakter als Swifts guard let und erhöht die Verschachtelungstiefe des Codes nicht.

Elvis Operator vs if-else: Vergleich

Elvis Operator ist kürzer als if-else und erfordert keine Wiederholung der Variablen. Vergleichen Sie: val x = a ?: b versus val x = if (a != null) a else b. Bei komplexen Ausdrücken erreicht die Code-Reduktion 60%, während die Semantik vollständig identisch ist — der Compiler kann für beide Varianten denselben Bytecode erzeugen.

KriteriumElvis Operatorif-else
Länge1 Zeile, 5–10 Zeichen3 Zeilen, 15–30 Zeichen
AusdruckswiederholungNeinJa (a != null) ? a : b
Faule rechte SeiteJaJa (elvis ist kürzer)
NebenwirkungenNur auf der rechten SeiteIn beiden Zweigen
LesbarkeitHoch für einfache FälleBesser für komplexe Logik

Wann man den Elvis Operator verwenden sollte

Der Elvis Operator ist optimal zum Zuweisen von Standardwerten, zum Verketten von Funktionsaufrufen mit sicherem Zugriff und zum Protokollieren fehlender Werte. Idiomatische Kotlin-Muster empfehlen ihn als Ersatz für if-else bei einfachen Null-Prüfungen in Ausdrücken. In Kombination mit ?. erzeugt er kompakte Ketten ohne temporäre Variablen.

Wann if-else vorzuziehen ist

if-else bleibt bei mehreren Bedingungen, wenn Nebenwirkungen ausgeführt werden müssen oder wenn beide Operanden komplexe Codeblöcke mit mehreren Operationen sind, vorzuziehen. Der Elvis Operator unterstützt keine verschachtelten Blöcke — nur einzelne Ausdrücke für jeden Operanden. Wenn die rechte Seite eine Funktion mit Nebenwirkungen aufruft, ist die Lesbarkeit von if-else höher.

Elvis Operator in anderen Programmiersprachen

Groovy verwendet genau dieselbe ?:-Syntax wie Kotlin, da beide Sprachen auf der JVM laufen und die Null-Sicherheitsphilosophie teilen. Der Operator erschien früher in Groovy — er ist seit Version 1.8, veröffentlicht 2011, in der Sprache enthalten. Groovy unterstützt auch Elvis-Zuweisung: x ?= value (nur zuweisen, wenn x null ist).

groovy
def name = getUserName()
def display = name ?: "Guest"

def map = ["key": "value"]
def result = map?.get("missing") ?: "default"
println(result)

// Elvis-Zuweisung in Groovy
def config = null
config ?= "defaultConfig"
assert config == "defaultConfig"

In Swift heißt das Äquivalent nil-coalescing operator und wird als ?? geschrieben. In Dart wird dieselbe ??-Syntax verwendet. Der Unterschied besteht darin, dass Swift und Dart eine Übereinstimmung der Operandentypen erfordern, während Kotlin unterschiedliche Typen mit automatischer Konvertierung zu einem gemeinsamen Supertyp erlaubt. In TypeScript erschien der ??-Operator (nullish coalescing) in Version 3.7 und funktioniert nur mit null und undefined, im Gegensatz zu ||, das alle falsy-Werte filtert. In PHP erschien der ??-Operator in Version 7.0, in C# — ?? seit Version 6.0.

Häufige Fehler mit dem Elvis Operator

Der häufigste Fehler ist die Verwechslung des Elvis Operator ?: mit dem sicheren Aufrufoperator ?. In Kotlin ruft ?. eine Methode oder Eigenschaft nur auf, wenn das Objekt nicht null ist, während ?: bei null einen Standardwert zurückgibt. Sie werden sequenziell kombiniert, aber jeder erfüllt seine eigene Funktion. Die Verwirrung entsteht bei Anfängern, die versuchen, ?: ohne ?. davor zu verwenden.

Nebenwirkungen im rechten Operanden

Die rechte Seite von Elvis wird faul ausgewertet, aber wenn sie einen Funktionsaufruf mit Nebenwirkungen enthält, kann dies zu unerwartetem Verhalten führen. Entwickler platzieren manchmal teure Berechnungen oder Protokollierung auf der rechten Seite, die bei nicht-null Wert nicht ausgeführt wird. Es ist wichtig zu bedenken, dass die rechte Seite ein Ausdruck ist, der nur bei Bedarf ausgewertet wird.

Verkettete Elvis ohne Gruppierung

Mehrere Elvis hintereinander können das Lesen des Codes erschweren. Beispielsweise wird a ?: b ?: c ?: d von links nach rechts ausgewertet und gibt den ersten nicht-null zurück. Gruppierung durch Klammern oder das Auslagern der Logik in eine separate Funktion verbessert die Lesbarkeit und erleichtert das Debugging. Wenn die Kette länger als 3 Elemente ist, sollte ein when-Ausdruck oder eine Hilfsfunktion verwendet werden.

Elvis statt if-else mit booleschen Bedingungen

Anfänger versuchen manchmal, den Elvis Operator zur Überprüfung von booleschen Werten zu verwenden: val x = flag ?: false. Dies funktioniert nur, wenn flag null sein kann. Für boolesche Bedingungen ohne null wird ein normales if-else oder ein ternärer Operator benötigt — Kotlin hat keinen ternären Operator, aber er wird durch den if-else-Ausdruck ersetzt: val x = if (flag) a else b.

Häufig gestellte Fragen

Wie unterscheidet sich der Elvis Operator vom ternären Operator?

Elvis Operator prüft nur auf null, während der ternäre Operator jede boolesche Bedingung akzeptiert. Kotlin hat keinen ternären Operator — er wird durch den if-else-Ausdruck ersetzt. Elvis löst eine spezifische Aufgabe: einen Standardwert bei null, während der ternäre Operator alle bedingten Ausdrücke abdeckt.

Kann der Elvis Operator mit Funktionen verwendet werden?

Ja, die rechte Seite kann ein Funktionsaufruf sein: val x = a ?: calculateDefault(). Die Funktion wird dank fauler Auswertung nur ausgewertet, wenn a null ist. Dies ermöglicht die Verwendung teurer Berechnungen, API-Aufrufe oder Datenbankabfragen ohne Leistungseinbußen, wenn ein Wert vorhanden ist.

Gibt es den Elvis Operator in Java?

Java hat keinen direkten Elvis Operator. Ab Java 8 kann Optional.ofNullable(value).orElse(default) verwendet werden. Java 14+ führte switch-Ausdrücke ein, aber ein vollständiges ?: fehlt. Kotlin und Groovy bieten ihn als eingebaute syntaktische Konstruktion der Sprache.

Wie funktioniert der Elvis Operator mit Aufrufketten?

Das typische Muster ist ein sicherer Aufruf ?. gefolgt von Elvis. Beispiel: user?.address?.city ?: „Unknown“. Wenn irgendein Element in der Kette null ist — wird der Standardwert zurückgegeben. Dies ist ein kompakter Ersatz für verschachtelte if-Prüfungen, der den Code im Vergleich zum traditionellen Ansatz um das 3- bis 5-fache reduziert.

Was ist der Unterschied zwischen dem Elvis Operator und orElse in Optional?

Elvis Operator ist eine syntaktische Konstruktion auf Sprachebene, während orElse eine Methode von Optional in Java ist. Elvis ist faul (die rechte Seite wird nur bei null ausgewertet), während orElse immer sein Argument auswertet. Für eine faule Variante in Java gibt es orElseGet, das einen Supplier akzeptiert. Elvis ist kürzer und erfordert kein Erstellen eines Optional.

Zusammenfassung

  • Elvis Operator — der ?:-Operator zur Bereitstellung eines Standardwerts bei null-Operand
  • Syntax in Kotlin und Groovy: val result = a ?: b, wobei b nur bei a == null ausgewertet wird
  • Null safety — der Hauptanwendungsbereich, der NullPointerException verhindert
  • Nil-coalescing — das Äquivalent in Swift (??) und Dart (??) mit ähnlicher Semantik, in TypeScript — ?? seit Version 3.7
  • Kombination mit sicherem Aufruf ?. ergibt eine kompakte Null-Behandlungskette ohne Verschachtelung
  • Faule Auswertung des rechten Operands — ein Hauptunterschied zum ternären Operator
  • Best Practice — für einfache Null-Prüfungen verwenden, in komplexen Blöcken mit Nebenwirkungen vermeiden

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch