As per documentation of When in Kotlin, else is not mandatory if the compiler knows all the values are covered. This is very in case of emums or sealed class but how to do it in case of arrays for numbers 1 to 5 (startRating).
private fun starMapping(startRating: Int): String {
return when (startRating) {
1 -> "Perfect"
2 -> "Great"
3-> "Okay"
4-> "Bad"
5-> "Terrible"
// don't want to add else as I believe it is prone to errors.
}
}
Something similar to this
return when (AutoCompleteRowType.values()[viewType]) {
AutoCompleteRowType.ITEM -> ItemView(
LayoutInflater.from(parent.context).inflate(R.layout.item_venue_autocomplete_item_info, parent, false))
AutoCompleteRowType.SECTION -> SectionView(
LayoutInflater.from(parent.context).inflate(R.layout.item_venue_autocomplete_section, parent, false)
)
}
Using
whenstatement it is impossible to excludeelseclause in case of using ints, because compiler doesn't know what to return ifstartRatingis not in 1..5 range. You can, for example, throw anIllegalStateExceptionif the value is not in the required range:Or you can do something like this:
But
elseclause is required.