문제

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으로 지정해줘야한다.

profile
개발하는 다람쥐

0개의 댓글