ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코틀린의 예외처리
    카테고리 없음 2020. 6. 19. 22:15

    Throwing and catching

    예외는 파이썬에서와 마찬가지로 거의 작동합니다. throw 를 할 것입니다.

    throw IllegalArgumentException("Value must be positive")

    try / catch (Python의 try / except에 해당)로 잡습니다.

    fun divideOrZero(numerator: Int, denominator: Int): Int {
        try {
            return numerator / denominator
        } catch (e: ArithmeticException) {
            return 0
        }
    }

    catch 블록은 던져진 예외와 일치하는 예외 유형이 발견 될 때까지 (정확히 일치 할 필요는 없습니다. 던져진 예외의 클래스는 선언 된 클래스의 서브 클래스 일 수 있음), 그리고 최대 하나의 catch 블록이 될 때까지 순서대로 시도됩니다. 실행됩니다. 일치하는 항목이 없으면 try / catch에서 예외가 발생합니다.

    finally 블록 (있는 경우)은 결과에 상관없이 try 블록이 성공적으로 완료된 후 또는 catch 블록이 실행 된 후 (다른 예외가 catch 블록에 의해 발생 된 경우에도) 또는 마지막에 실행됩니다. 일치하는 캐치를 찾을 수 없습니다.

    파이썬과 달리 try / catch는 표현식입니다. try 블록의 마지막 표현식 (성공하는 경우) 또는 선택한 catch 블록이 결과 값이되므로 (결과에 영향을 미치지 않음) 위의 함수 본문을 리팩토링 할 수 있습니다. :

    return try {
        numerator / denominator
    } catch (e: ArithmeticException) {
        0
    }

    기본 예외 클래스는 Throwable (하위 클래스 Exception을 확장하는 것이 더 일반적 임)이며 수많은 내장 예외 클래스가 있습니다. 필요에 맞는 것을 찾지 못하면 기존 예외 클래스에서 상속하여 직접 만들 수 있습니다.

    Java 코드와 상호 작용할 때를 제외하고 Kotlin에서는 예외가 다소 권장되지 않습니다. 자신의 코드에서 예외를 throw하는 대신 Arrow 라이브러리에서 Option 또는 Either와 같은 특수 반환 유형을 사용하십시오.

    Nothing

    throw도 표현식이며 반환 유형은 인스턴스가없는 특수 클래스 Nothing입니다. 컴파일러는 형식이 Nothing 인 식은 정상적으로 반환되지 않으므로 Elvis 연산자 다음과 같이 다른 형식이 필요한 경우에도 일반적으로 사용을 허용합니다. 항상 던지거나 무한 루프를 시작하는 함수를 만드는 경우 컴파일러가이를 인식하도록 반환 유형을 Nothing으로 선언 할 수 있습니다. 이에 대한 한 가지 재미있는 예는 내장 함수 TODO이며, 어떤 식 으로든 (문자열 인수 제공) 호출 할 수 있으며 NotImplementedError가 발생합니다.

    nullable버전의 Nothing?은 무언가가 null로 초기화되고 다른 유형 정보가 없을 때 컴파일러가 사용합니다. val x = null에서 x의 유형은 Nothing?입니다. 이 유형에는 "정상적으로 리턴하지 않음"의미가 없습니다. 대신 컴파일러는 값이 항상 null임을 알고 있습니다.

    출처: https://kotlinlang.org/docs/tutorials/kotlin-for-py/exceptions.html

    댓글

Designed by Tistory.