val myNum = 43 // if // if (myNum % 2 == 1) { // println("odd") // } // println("after the if") // if-else if // if (myNum % 2 == 1) { // println("odd") // } else if (myNum < 0) { // println("negative") // } // println("after the if") // if-else // if (myNum % 2 == 1) { // println("odd") // } else { // println("even") // } // if-else expression // println(if (myNum % 2 == 1) "odd" else "even") // when // when { // myNum % 2 == 1 -> println("odd") // myNum < 0 -> println("negative") // } // when expression // val result = when { // myNum % 2 == 1 -> "odd" // myNum < 0 -> "negative" // else -> "even non-negative" // } // when with a value // when (myNum % 2 == 1) { // true -> "odd" // false -> "even" // } // when with an enumeration enum class TrafficLight { RED, YELLOW, GREEN, } // fun nextLight(current: TrafficLight): TrafficLight { // return when (current) { // TrafficLight.RED -> TrafficLight.GREEN // TrafficLight.YELLOW -> TrafficLight.RED // TrafficLight.GREEN -> TrafficLight.YELLOW // } // } // when with a sealed class sealed class Author { // don't know :( object Unknown: Author() // known human data class FullName( val firstName: String, val lastName: String ): Author() // tricksy! data class Pseudonym( val knownAs: FullName, val realName: FullName ): Author() } // converts a full name value to the corresponding // string with first and last name // fun fNToString(fullName: Author.FullName): String { // return "${ fullName.firstName } ${ fullName.lastName }" // } // fun getGreeting(a: Author): String { // return "hi " + when (a) { // is Author.Unknown -> "unknown" // is Author.FullName -> fNToString(a) // is Author.Pseudonym -> "${ fNToString(a.realName) } (known as ${ fNToString(a.knownAs) })" // } // } // println(getGreeting(Author.Unknown)) // println(getGreeting(Author.FullName("hank", "green"))) // println(getGreeting(Author.Pseudonym( // knownAs = Author.FullName( // firstName = "mary", // lastName = "westmacott" // ), // realName = Author.FullName( // firstName = "agatha", // lastName = "christie" // ), // )))