if expressions

Bob
Bob in Kotlin
object Bob {

    fun hey(input: String): String {
        val msg = input.trim()
        if (msg.isEmpty()) return "Fine. Be that way!"
        val isQuestion = msg.endsWith('?')
        val isYelling = ('A'..'Z').any { msg.contains(it) } && msg == msg.uppercase()
        if (isYelling)
                return if (isQuestion) "Calm down, I know what I'm doing!" else "Whoa, chill out!"
        else return if (isQuestion) "Sure." else "Whatever."
    }
}

In this approach you have a series of if expressions to evaluate the conditions. As soon as the right condition is found, the correct response is returned.

An object declaration is used to define Bob as essentially a singleton object instantiation of the class. This is sufficient, since there is no object state that needs to change with each call of the hey method.

The String trim() method is applied to the input to eliminate any whitespace at either end of the input. If the string has no characters left, it returns the response for saying nothing.

Caution

Note that a null string would be different from a String of all whitespace. A null String would throw a NullPointerException if trim() were applied to it.

A question is determined by use of the endsWith() method to see if the input ends with a question mark.

A range of A..Z is defined to look for uppercase English alphabetic characters.

The first half of the isYelling implementation

if (('A'..'Z').any { msg.contains(it) }

is constructed from the range and the any method to ensure there is at least one uppercase letter character in the String. The lambda of any uses the it keyword to refer to the single Char parameter for the lambda, and passes it to the contains method to check if the character is in the input String. The check that there is any alphabetic character is needed, because the second half of the condition tests that the uppercased input is the same as the input. If the input were only "123" it would equal itself uppercased, but without letters it would not be a yell.

If isYelling is true, then a ternary expresson is used to return either the response for a yelled question or just a yell.

If isYelling is false, then a ternary expression is used to return either the response for a question or a plain statement.

23rd Oct 2024 · Found it useful?