Ich habe eine Nullable-Eigenschaft (ein Java-Objekt), die weiß, wie man sich in einen String konvertiert, und wenn diese Darstellung nicht leer ist, möchte ich etwas damit machen. In Java sieht das so aus:
%Vor%Ich versuche den am meisten idiomatischen Weg zu finden, dies zu Kotlin umzuwandeln, und ich habe:
%Vor% Aber es fühlt sich immer noch nach zu viel Arbeit für solch eine einfache Operation an. Ich habe das Gefühl, dass ich let
, when
und with
zusammenfassen kann. Das kann ich etwas kürzer machen.
Die Schritte sind:
Ich habe es versucht:
%Vor%Aber (1) es scheitert mit:
%Vor% Und selbst wenn es das überstanden hätte, (2) würde es die erschöpfende else
haben wollen, die ich nicht wirklich berücksichtigen möchte.
Was ist der "Kotlin-Weg" hier?
Sie können die (seit Kotlin 1.1) eingebaute stdlib takeIf()
takeUnless
Erweiterungen funktionieren entweder:
Um die Aktion doSomethingWith()
auf den endgültigen Wert auszuführen, können Sie apply()
let()
, um das Ergebnis des Ausdrucks zu ändern, oder run()
im Kontext des aktuellen Objekts arbeiten und auch das Ergebnis des Ausdrucks ändern, oder also()
, um Code beim Zurückgeben des ursprünglichen Objekts auszuführen.
Sie können auch eine eigene Erweiterungsfunktion erstellen, wenn die Benennung aussagekräftiger sein soll, zum Beispiel nullIfBlank()
könnte ein guter Name sein:
Dies ist als Erweiterung für ein Nullable String
definiert:
Wenn wir eine weitere Erweiterung hinzufügen:
%Vor%Dadurch kann der Code vereinfacht werden zu:
%Vor%Sie können solche Erweiterungen immer schreiben, um die Lesbarkeit Ihres Codes zu verbessern.
Hinweis: Manchmal habe ich den ?.
null sicheren Accessor und andere Male nicht verwendet. Dies liegt daran, dass die Prädikate / Lambdas einiger Funktionen mit Nullwerten arbeiten und andere nicht. Sie können diese so gestalten, wie Sie möchten. Es liegt an dir!
Weitere Informationen zu diesem Thema finden Sie unter: Idiomatische Art und Weise mit NULLEN umzugehen