Kotlin 基礎 Part 2 -- 예외(예외) の投げ方
왜
例外についての知見が
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が追いやすくなるだろう.
Reference
이 문제에 관하여(Kotlin 基礎 Part 2 -- 예외(예외) の投げ方), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/kotlin-exceptionli-wai-notou-gefang-1e30텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)