fun eval(e: Expr): Int {
if (e is Num) {
return e.value
} else if (e is Sum) {
return eval(e.left) + eval(e.right)
} else {
throw IllegalArgumentException("Unknown expression")
}
}
- 위는 if 식으로 사용한 경우
- when 으로 리팩토링 한 경우
fun eval(e: Expr): Int =
when (e) {
is Num -> e.value
is Sum -> eval(e.left) + eval(e.right)
else -> throw IllegalArgumentException("Unknown expression")
}
- when 식은 타입 검사와 스마트 캐스프를 사용해 각 케이스를 처리하게 된다.
- 해당 코드는
if
식과 동일한 로직을 더 간결히 표현가능하다!
fun eval(e: Expr): Int =
when (e) {
is Num -> {
e.value
}
is Sum -> eval(e.left) + eval(e.right)
else -> throw IllegalArgumentException("Unknown expression")
}
- 람다식이라 블럭 처리도 가능하다.
왠지 모르게 Mockito 에서 BDDMockito 를 사용하는 이유가 뭔가 비슷하지 않나 생각이 들었다
- given - when - then 의 구조에서
- when() 을 given 위치에 쓰는 행위 자체가 이질감이 들었는데
- switch 라는 문법을 모르는 사람이 보면 이해할 수 없는 구조에서
- when 이라는 사람이 조금 더 이해하기 쉬운 구조의 고수준의 언어가 된 것 같다는 착각…?
- 또한 else 처리도 보면
- default 라는 기계같은 분기에서
- else 라는 인간적인 느낌의 문법으로 변화한거같다.
- given - when - then 의 구조에서
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린인액션] 스마트 캐스트 (0) | 2023.11.23 |
---|---|
[코틀린인액션] 스마트 캐스트 (0) | 2023.11.23 |
[코틀린인액션] 범위와 수 (0) | 2023.11.23 |
[코틀린인액션] Hello World (0) | 2023.11.23 |
[코틀린인액션] 코틀린 기초(2) (0) | 2023.11.21 |