Ternary operator workaround

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)
}