enum class Color (
val r: Int, val g: Int, val b:Int
) {
RED(255, 0, 0), ORANGE(255, 165, 0),
YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
INDIGO(75, 0, 130), VIOLET(238, 130, 238);
// 유일하게 세미콜론 필수인 부분
fun rgb() = (r * 256 + g) * 256 + b
}
fun main() {
println(Color.BLUE.rgb()) // 255
}
enum class Color (
val r: Int, val g: Int, val b:Int
) {
...
fun getWarmth(color: Color) = when(color) {
Color.RED, Color.ORANGE, Color.YELLOW -> "warm"
Color.GREEN -> "neutral"
Color.BLUE, Color.INDIGO, Color.VIOLET -> "cold"
}
}
import Color.*
// Color enum class 생략, 위와 동일
fun getWarmth(color: Color) = when (color) {
RED, ORANGE, YELLOW -> "warm"
GREEN -> "neutral"
BLUE, INDIGO, VIOLET -> "cold"
}
fun main() {
println(getWarmth(RED)) // warm
}
fun mix(c1: Color, c2: Color) =
when (setOf(c1, c2)) {
setOf(RED, YELLOW) -> ORANGE
setOf(YELLOW, BLUE) -> GREEN
setOf(BLUE, VIOLET) -> INDIGO
else -> throw Exception("Dirty color")
}
fun main() {
println(mix(RED, YELLOW))
}
fun mixOptimized(c1: Color, c2: Color) =
when {
(c1 == RED && c2 == YELLOW) ||
(c1 == YELLOW && c2 == RED) -> ORANGE
(c1 == YELLOW && c2 == BLUE) ||
(c1 == BLUE && c2 == YELLOW) -> GREEN
(c1 == BLUE && c2 == VIOLET) ||
(c1 == VIOLET && c2 == BLUE) -> INDIGO
else -> throw Exception("Dirty color")
}
fun main() {
println(mixOptimized(BLUE, YELLOW))
}
CQRS 패턴에서 Command 에 따른 Handler 분기할 때 사용할 수 있을 것 같다.
kotlin when 문법 잘 보고갑니다. 정리가 잘 되어있네요!