Kotlin-Idiom für die Arbeit mit Nicht-Null-Objekten und nicht leeren String-Repräsentationen

8

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:

  1. Wenn das Objekt (A) nicht null ist
  2. Wenn die String-Repräsentation (B) von Objekt (A) nicht leer ist
  3. Mach etwas mit (B)

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?

    
Craig Otis 23.05.2017, 15:32
quelle

1 Antwort

9

Sie können die (seit Kotlin 1.1) eingebaute stdlib takeIf() oder takeUnless Erweiterungen funktionieren entweder:

%Vor%

Um die Aktion doSomethingWith() auf den endgültigen Wert auszuführen, können Sie apply() im Kontext des aktuellen Objekts zu arbeiten und die Rückgabe ist das gleiche Objekt, oder 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:

%Vor%

Dies ist als Erweiterung für ein Nullable String definiert:

%Vor%

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

    
Jayson Minard 23.05.2017, 15:43
quelle