Although Kotlin has excellent support for dealing with nulls (Nullables types, Smart casts), some functional styles use an Option type
Option
// Without Option val nullableString:String? = foo() val aString = nullableString ?: "Default String" // With Option val optionString:Option<String> = foo().toOption() //toOption() is an extension function // Using when val aString = when(optionString){ is Some<String> -> optionString.get() else -> "Default String" } // Using isEmpty val aString = if(optionString.isEmpty()){ "Default String" } else { optionString.get() } // Using fold(ifEmpty, f), val aString = optionString.fold({ "Default String" }){ it } // Using getOrElse val aString = optionString.getOrElse{ "Default String" }
There is also an extension function for Map<K, V> to get values as Option
Map<K, V>
@Test fun getAsOption() { val map = mapOf(1 to "uno", 2 to "dos") assertEquals(map.option[1], Some("uno")) assertEquals(map.option[3], None) }
There is also a firstOption extension function for replacing firstOrNull
firstOption
firstOrNull
@Test fun firstOption() { val l = listOf(1, 2, 3, 4, 5, 6) assertEquals(l.firstOption(), Some(1)) assertEquals(l.firstOption { it > 2 }, Some(3)) }
There was an error while loading. Please reload this page.