Tavon Gatling
tavon.dev / GatlingXYZ

tavon.dev / GatlingXYZ

Kotlin: If, Else, When

Tavon Gatling's photo
Tavon Gatling
·Jan 11, 2021·

3 min read

Kotlin was an easy language to switch to, with a very small learning curve. Most of it looks similar to its Java counterpart, yet somehow easier. To go along with the other posts I have about switching from Java to Kotlin, today I'll go over a few basics just to make sure it's clear how easy the switch is: ifs, elses, and whens.

If & Else

Overall, Ifs and Elses don't change much. Outside of leaving off semicolons, you can use your knowledge of Java to watch if-else statements.

if (makeIntimidationCheck() >= DC)
    // intimidation success code

var proficiencyBonus: Int

if (level >= 17) {
    proficiencyBonus = 6
} else if (level >= 13) {
    proficiencyBonus = 5
} else if (level >= 9) {
    proficiencyBonus = 4
} else if (level >= 5) {
    proficiencyBonus = 3
} else {
    proficiencyBonus = 2
}

‌ It's worth noting that there is no ternary operator in Kotlin, meaning you can't do var value = isSomething ? valueOne : valueTwo. That kinda makes me sad (I like the aesthetic, sue me), but an if-else can handle it just fine the same way.

var charismaSkillBonus = 3

var intimidationBonus = if (isProficientInIntimidation) proficiencyBonus + charismaSkillBonus else charismaSkillBonus

var intimidationBonus = if (isProficientInIntimidation) {
    // other stuff
    proficiencyBonus + charismaSkillBonus
} else {
    // other stuff
    charismaSkillBonus
}

When

In Java (and many other languages), you can use a Switch statement. In Kotlin, it's called when. Let's turn that previous example about proficiencyBonus into a much better when:

var proficiencyBonus = when (level) {
    1, 2, 3, 4 -> 2
    5, 6, 7, 8 -> 3
    9, 10, 11, 12 -> 4
    13, 14, 15, 16 -> 5
    17, 18, 19, 20 -> 6
}

‌ Eh, okay, that's probably not the best. Luckily, in my example, level can only be a number from 1 to 20. But, knowing this, when can modify that a bit, showing some of the complexities that a when can handle.

var proficiencyBonus = when (level) {
    in 1..4 -> 2
    in 5..8 -> 3
    in 9..12 -> 4
    in 13..16 -> 5
    in 17..20 -> 6
}

‌ Awesome! Much better, I think.

A when can also serve as a more direct replacement for an if-else chain. If you remove the argument, you can do whatever you want.

var proficiencyBonus = when {
    level >= 17 -> 6
    level >= 13 -> 5
    level >= 9 -> 4
    level >= 5 -> 3
    else -> 2
}

There is some official Kotlin documentation that goes into a bit more depth on these things and more. Check it out and let me know in the comments or on Twitter (@GatlingXYZ) if you have any questions or want me to flesh anything out a bit more. The next post in my "Let's Code" series for Kotlin will be about Fors and Whiles, so stay tuned!

 
Share this