Kotlin 基礎 Part 2 -- 예외(예외) の投げ方

6782 단어 exceptionkotlin



例外についての知見が

API にリクエストを投げて駄目だったときに備えて作っておくべきもの



程度しかなかったので


Exception (예외) とは?



https://www.udemy.com/course/kotlinmasterclass/learn/lecture/16673664#overview

Udemy の Kotlin Master Class で学習した.

予想しないことが起こった時に出るもので
一度例外が出ると、そこからsystemは復帰で きないらしい.

Stacktrace는 Exception の前にどこの関数が動いたかの情報が出る.

普通に起こる 예외



    print("text".toInt())

java.lang.NumberFormatException: For input string: "text"

String を Int にする와 NumberFormatException が出る.

at com.example.springboot.PersonHandler.getPersons(Resource.kt:18) 


同時 に Stacktrace が出る.
여기에서 PersonHandler 의 getPersons( Resource.kt 의 18 실행 ) 으로 시작했습니다.

try/catch で 예외



    try {
      print("text"?.toInt())
    } catch (e: Exception) {
      println("Exception Occurred!")
      println(e.localizedMessage)
    }

先程の NumberFormatException を起こすこードを try の内部にいれて
Exception がでたら Exception の localizedMessage がでるようにした.

Exception Occurred!
For input string: "text"


localizedMessage だとこの最小限のエラーメッセージが出る.
また、通常 Exception がでたら アプリは終了する.
しかし今回は try で予測して Exception を catch している.
なのでアプリは終了せず、次の行が実行できた.

Exception を握りつぶしながら詳細なスタックトレースも出す



catch (e: Exception) {
      println("Exception Occurred!")
      e.printStackTrace()
      println(e.localizedMessage)
    }

e.printStackTrace を catch の中にいれると
예외 を握りつぶしながら、詳細なスタックトレースも出せる.



再び見慣れたエラーの赤い文字が出るようになる

その後に finally を書くと、try がうまくいっても Error がでてもどのみち動く.初期化処理とかを書くのかな?

状況や引数不足で例外を投げるようにする



오리지날의 예 외면을 벗기다.

    throw IllegalStateException("なんかちがう")



java.lang.IllegalStateException: なんかちがう


https://programmer-life.work/java/illegalstateexception

IllegalStateException は不適切な状況の時に投げるべき 예외

https://kotlinlang.org/docs/exceptions.html#the-nothing-type

    val name = null
    name ?: throw IllegalArgumentException("Name required")



java.lang.IllegalArgumentException: Name required


IllegalArgumentException は引数が不適切な時に投げる 예외

このように、その場にふさわしい名前の例外を投げよう!


条件に応じてoriginalな例外を投げる



런타임 예외 を拡張して、HogeIdNotFoundException のようなカスタムエラーも作ることができる.要検証.

HogeId가 아닌 경우 HogeIdNotFoundException()을 던질 수 있습니다.


まとめ



String が Int に変換されたり、予想外のことが起こると
Kotlin は 예외 を吐いてアプリが終了する.

しかし、予想外のことが起きそうな行を try の内部で書いて
catch で受け止めれば、Apriを終了せずに続行することができる.

一方、握りつぶしたと ころでその処理は行われない.データの不整合などが起きると困るので,catch の中には stacktrace を出すようにして後でlog で確認きるように!

また、Usecase で条件に応じて IllegalStateException や IllegalArgumentException を throw すれば、まずいものが入る前にアプリを終了するようにできる.

さらに、Runtime Exception は拡張できるので、自分のOriginalの Exception を作るとエラーlogが追いやすくなるだろう.

좋은 웹페이지 즐겨찾기