A much more elegant approach
//IF
infix fun <T> Boolean.then(ifResult: T?): Pair<Boolean, T?> {
return Pair(this, ifResult)
}
//ELSE
infix fun <T> Pair<Boolean,T?>.orElse(elseResult: T?): T? {
return if( this.first){
this.second
}else{
elseResult
}
Here are the tests
@Test
fun testTrue() {
val str = "false"
thenOrElse(true, null, str, null)
thenOrElse(true, "true", str, "true")
thenOrElse(true, "true", str, "true")
val int = 0
thenOrElse(true, 1, int, 1)
val nullable: String? = null
thenOrElse(true, "true", nullable, "true")
}
@Test
fun testFalse() {
val str = "false"
thenOrElse(false, null, str, str)
thenOrElse(false, "true", str, str)
val int = 0
thenOrElse(false, 1, int, int)
val nullable: String? = null
thenOrElse(false, "true", nullable, nullable)
}
private fun <CLASS> thenOrElse(condition: Boolean, ifResult: CLASS?, elseResult: CLASS?, expectedValue: CLASS?) {
assertEquals(condition.then(ifResult).orElse(elseResult), expectedValue)
assertEquals(condition then ifResult orElse elseResult, expectedValue)
}