fun Request.getBody() =
when (val response = executeRequest()) {
is Success -> response.body
is HttpError -> throw HttpException(response.status)
}
자바에서 어떤 변수의 타입을 instanceof로 확인한 다음에 그 타입에 속한 멤버에 접근하기 위해서는 명시적으로 변수 타입을 캐스팅해야 한다.
코틀린에서는 프로그래머 대신 컴파일러가 캐스팅을 해준다. 어떤 변수가 원하는 타입인지 is로 검사하고 나면 변수를 원하는 타입으로 캐스팅하지 않아도 그 타입으로 선언된 것처럼 사용할 수 있다. 이것을 스마트 캐스트라고 부른다.
fun eval(e: Expr): Int {
if (e is Num) {
// 불필요한 타입 변환. 스마트 캐스트에 의해 e를 바로 사용하면 된다.
val n = e as Num
return n.value
}
...
}
스마트 캐스트는 is로 변수에 든 값의 타입을 검사한 다음에 그 값이 바뀔 수 없는 경우에만 동작한다. 따라서 변수는 반드시 val 이어야 하며 커스텀 접근자(getter, setter)를 사용한 것이어도 안 된다. 항상 같은 값을 내놓는다고 확인할 수 없기 때문이다.
코틀린에서는 if가 값을 만들어내기 때문에 자바와 달리 3항 연산자( a > b ? a : b
)가 따로 없다.
아스키 코드를 2진 표현으로 바꾸는 방법
fun main() {
println(Integer.toBinaryString('c'.code)) // 1100011
}