【Kotlin入門】try-catchを学んで例外処理をマスターしよう!


Kotlinで例外処理ってどうやるんだろう
Kotlinでtry catchの使い方を学びたい

Kotlinで例外処理をしようと思ってもtry catchの使い方がよくわからなかったり、そもそもチェック例外が強制されなかったりとJavaなどとは少し違って戸惑っている人はいませんか?

こんにちは!エンジニアのかいです。Kotlinをこれから始めようとしている人、もしくは始めたての人であればプログラミングの基本中の基本である例外処理、try catchについて上記のような悩みを抱えている方はいませんか?

そこで、本日はKotlin初心者の方を対象にtry catchの基本的な使い方や、基本的な例外処理の概念について説明していきます。

この記事はこんな人のために書きました。

  • Kotlinでtry catchを使いこなしたい
  • Kotlinの例外処理がよくわからない

try-catchの使い方をみてみよう

まずは、例外処理を行うためのtry catchの基本的な使い方を見ていきましょう。

サンプルプログラム1:

サンプルプログラム2:

Javaや他言語でtry catchを書いてきた人には特に問題なく理解いただけると思いますが、ほとんど書き方は同じですね。エラーを返す可能性がある処理をtryでくくって、そのエラーをcatchで捕捉してやればよいです。

今回はExceptionで全ての例外を捕捉していますが、これをNumberFormatExceptionなどエラーを指定して捉えることももちろん可能です。

finallyの使い方

さて、次はfinallyを使ってみましょう。finallyとは、エラー捕捉の有無にかかわらず、tryの最後に必ず実行されるものです。

つまり、catchされたにしてもされないにしても必ず実行されます。以下例をみてみましょう。

サンプルプログラム1:

サンプルプログラム2:

このように、finallyは必ず最後に実行されていますね。

try-catchを複数使ってみる

次は、try catchをネストさせて書いてみましょう。

サンプルプログラム1:

サンプルプログラム2:

このようにcatchの中にtryをまた書いてやることでtryをネストさせることができます。ただ、可読性が下がるのでできるだけ避けたほうが無難です。

複数のエラーを捕捉する場合

ちなみに複数のエラーが出る可能性があってエラーによって処理を変えたい場合は以下のようにかけます。

サンプルプログラム1:

サンプルプログラム2:

このようにwhenをつかってエラーによって条件分岐してやればよいですね。whenの使い方については以下の記事に書いてあるので参考にしてみてください。

【入門】Kotlinでwhenを使いこなそう!Javaとの違いについても解説
更新日 : 2019年6月19日

Kotlinでtryを使う時の注意点

さて、ここでKotlinの例外処理が他と違う点を述べていこうと思います。例外処理が違う点というよりは、Javaでは言語の仕様として検査例外非検査例外というものがありましたが、Kotlinには検査例外という仕組みはありません。

例外の処理について触れておくと、検査例外とはチェック例外などとも言われ、簡単にいうとコードではなく外部に依存しているエラーのことです。例えば、ディスクの容量が足りなかったり、ファイルが壊れていたりする場合にその処理に該当するコードで発生するエラーですね。

JavaのException以下でRuntime Exception以外のクラスなどとも言われますね。Javaではこの検査例外はエラーの捕捉が強制されており、例外処理を行わないとコンパイルが通りません。

そして、非検査例外はRuntime Exception以下のクラスのことでこれはコードレベルで問題がある場合のエラーですね。NullPointerExceptionやArrayIndexOutOfBoundsExceptionが馴染み深いのではないでしょうか。

例外についてわかったところでもう一度Kotlinに戻ると、先ほど述べたようにKotlinには検査例外というものがないのでJavaのようにtry catchを強制させられることはありません。

実はKotlinのみならずモダンな言語では、検査例外がないという仕様を担っているものが多いです。その理由としては、非同期処理との相性の悪さや、try catchでエラーが捕捉しきれなかったり、エラーが握りつぶされたりするからですね。

例えばこのように例外をthrowしてもtry catchを強制されることはありません。とはいえもちろん捕捉することはできます。

まとめ

本日はKotlinの例外処理について話してきました。KotlinにはResult型などでエラー処理を行うことも可能でtry catchばかりを使っていると適切でない場面もあるので場合に応じて使い分けていきましょう!

それでは!!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

かい

かい

日向徹かこよすぎか

[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説