Nothing type can be used as a return type for a function that always throws an exception. When you call such a function, the compiler uses the information that the execution doesn't continue beyond the function.
Specify Nothing return type for the failWithWrongAge function. Note that without the Nothing type, the checkAge function doesn't compile because the compiler assumes the age can be null.
import java.lang.IllegalArgumentException
fun failWithWrongAge(age: Int?) {
throw IllegalArgumentException("Wrong age: $age")
}
fun checkAge(age: Int?) {
if (age == null || age !in 0..150) failWithWrongAge(age)
println("Congrats! Next year you'll be ${age + 1}.")
}
fun main() {
checkAge(10)
}
import java.lang.IllegalArgumentException
fun failWithWrongAge(age: Int?) : Nothing {
throw IllegalArgumentException("Wrong age: $age")
}
fun checkAge(age: Int?) {
if (age == null || age !in 0..150) failWithWrongAge(age)
println("Congrats! Next year you'll be ${age + 1}.")
}
fun main() {
checkAge(10)
}
항상 예외를 던지는 Nothing
타입에 대한 문제이다.
Nothing
타입은 반환값이 없음을 나타내며, 이는 주로 예외를 던지는 함수에서 사용된다.
Nothing
타입을 반환하는 함수는 정상적으로 종료되지 않음을 컴파일러에게 알려준다.
문제에서 failWithWrongAge
함수는 반환유형이 지정되어 있지 않았다.
Nothing 타입이 없으면 컴파일러는 age
가 null일 수 있다고 가정하므로 checkAge
함수는 컴파일되지 않는다.
그렇기 때문에 failWithWrongAge
함수에 반환타입으로 Nothing
을 지정해 주어야 한다.
Nothing
타입의 정확한 의미는 값이 없다는 의미이지만,
함수가 throw
에 의해 반환될 때 함수의 반환 타입을 꼭 Nothing
으로 지정해야 하는 것은 아니다.
throw
에 의해서만 반한되는 함수라면 프로그램의 명료성을 위해 반환 타입을 Nothing
으로 지정해줘야한다.