2016-05-16 7 views
3

wir uns vor, Sie haben 2 fonctions Rückkehr nullable und kann nicht Sie dieses Bild 2 Funktionen komponieren:Wie zu komponieren nullables in Kotlin

fun giveInt(x: Int):Int? = x+1 
fun giveInt2(x: Int):Int? = x+2 

die Zusammensetzung zu erreichen, schrieb ich diese Funktionen:

fun all(x:Int):Int? { 
    val y = giveInt(x) 
    if (y != null) return giveInt2(y) else return null; 
} 

val four = all(1) 

Ist es möglich, 2 Nullable-Werte zu erstellen, um ein anderes Nullable zu erhalten, ohne explizit if (y != null) und return null zu schreiben?

In Scala würde ich nur so etwas wie:

def giveInt(x: Int):Option[Int] = Some(x+1) 
def giveInt2(x: Int):Option[Int] = Some(x+2) 
def all(x:Int): Option[Int] = giveInt(x).flatMap(giveInt2) 

Sollte verwende ich Java Optional dies zu erreichen, oder ist es möglich, mit ? Operator?

Thanks :)

+1

Dieses schwer fällt unter: http://stackoverflow.com/questions/34498562/in-kotlin-what-is-the-idiomatic-weg-mit-nullwert-werte-referenzieren-o –

Antwort

2

Falls Sie wollen buchstäblich zwei Funktionen zu definieren (in der FP-Sinn), dann ist es besser, Funktionsreferenzen zur besseren Lesbarkeit verwenden:

fun giveInt(x: Int):Int? = x+1 
fun giveInt2(x: Int):Int? = x+2 

fun all(x: Int): Int? = giveInt(x)?.let(::giveInt2) 
6

Es ist möglich, mit safe call ?. Operator und let Funktion Combo wie folgt aus:

fun giveInt(x: Int):Int? = x+1 
fun giveInt2(x: Int):Int? = x+2 

fun all(x: Int): Int? = giveInt(x)?.let { giveInt2(it) } 

Weitere Idiome wie diese verwenden this link.

+0

Große Antwort Danke! – Loic

+0

Die Methoden zur Erweiterung der Methoden würden den Prozess enorm vereinfachen. –