Kotlinのtry式とは?初心者でもわかる例と使い方をやさしく解説
生徒
「先生、Kotlinのtryって、例外処理だけに使うものなんですか?」
先生
「いい質問ですね。実はKotlinでは、tryは“式”としても使えるんです。」
生徒
「“式”ってなんですか?初めて聞きました……」
先生
「大丈夫、初心者でもわかるように、これからやさしく解説しますね!」
1. Kotlinのtryは“文”ではなく“式”としても使える
Kotlin(コトリン)の大きな特徴の一つに、tryが「式(しき)」として扱えるという点があります。Javaなどの他の言語では、tryは単にエラーを防ぐための「文(構文)」でしたが、Kotlinでは実行した結果として「値」を返してくれる便利な仕組みになっています。
ここで言う「式」とは、計算や処理のあとに結果(値)が手元に残るものを指します。身近な例で考えてみましょう。
- 式(Expression):
1 + 1のように、計算すると「2」という結果が返ってくるもの。 - 文(Statement):
println("Hello")のように、処理を実行するだけで、それ自体が値を持たないもの。
Kotlinのtryは式なので、エラーが起きなかった時の値や、エラーが起きた時の代わりの値を、そのまま変数(valなど)に代入することができるのです。これにより、コードが非常にシンプルで読みやすくなります。
まずは、プログラミングが初めての方でも分かりやすい「おみくじ」のようなイメージで、式としての動きを見てみましょう。
fun main() {
// tryの結果をそのまま変数「message」に代入しています
val message = try {
"ラッキー!成功です" // エラーがない場合はこの値が返る
} catch (e: Exception) {
"残念、エラーが発生しました" // エラーが出た場合はこの値が返る
}
println(message)
}
このコードでは、tryブロックの最後の一行が「式の戻り値」となります。このように「エラーを監視しながら、同時に結果を受け取る」ことができるのが、Kotlin流のスマートな書き方です。わざわざtryの外側で空の変数を作っておく必要がないため、バグの少ない安全なプログラムを書くことができます。
2. try式の基本的な書き方と代入の仕組み
Kotlinのtryは、単なるエラー処理の構文ではなく、「結果を値として返すことができる」という便利な特徴を持っています。これを「式(Expression)」と呼びます。
プログラミングが初めての方でも分かりやすいように、割り算の結果を変数に代入するシンプルな例を見てみましょう。もし計算中にエラーが起きても、プログラムが強制終了せずに、あらかじめ決めた「安全な値」を返してくれます。
fun main() {
// tryの結果を変数resultに直接代入します
val result = try {
// 通常通り実行したい処理(ここでは 10 ÷ 2)
10 / 2
} catch (e: ArithmeticException) {
// エラー(0での割り算など)が発生したときに返す値
0
}
println("計算結果は $result です")
}
このプログラムの動きを詳しく解説します。まずtryブロックの中が実行され、10 / 2の結果である「5」が導き出されます。このとき、エラーが発生しなければ、そのままresultという変数に「5」が格納されます。
一方で、もし10 / 0のような計算(0除算エラー)を行おうとした場合は、即座にcatchブロックへ処理が移り、そこに記述された「0」がresultに代入される仕組みです。このように、「成功時の値」と「失敗時の値」をスマートに使い分けられるのがKotlinのtry式のメリットです。
計算結果は 5 です
例外処理と変数への代入を1か所で完結できるため、コードがスッキリとして読みやすくなり、記述ミス(バグ)を減らす効果も期待できます。初心者の方は、まずはこの「変数に代入する形」をセットで覚えるのがおすすめです。
3. try式は「変数への代入」で真価を発揮する
Kotlinのtryは、単なるエラー処理の枠組みではなく、「結果をそのまま変数に代入できる」という非常に便利な特徴(try式)を持っています。これにより、プログラムが途中で止まるのを防ぎつつ、安全に初期値を設定できるのです。
例えば、アプリの入力画面でユーザーが数字を入力する場面を想像してみましょう。もしユーザーが間違えて「あいうえお」と入力してしまった場合、そのまま計算しようとするとアプリは強制終了してしまいます。しかし、try式を使えば「失敗したらこの値にする」という動きをスマートに記述できます。
fun main() {
// ユーザーからの入力を想定(数字ではない文字列)
val userInput = "abc"
// tryの結果を直接numberに代入する
val number = try {
userInput.toInt() // 整数への変換に挑戦!
} catch (e: NumberFormatException) {
// もし数字以外の文字でエラー(例外)が出たら、安全のために「0」を返す
0
}
println("変換結果は $number です。")
println("エラーが起きてもプログラムは止まらずに、次の処理へ進めます。")
}
このコードでは、toInt()という関数が失敗した瞬間にcatchブロックへとジャンプし、最後に書かれた0という値が変数numberに格納されます。Javaなどの古い言語では、変数を一度空で宣言してから後で代入し直す必要がありましたが、Kotlinならこのように一行でスッキリと、かつ「プログラミング未経験者」でも直感的に読みやすい形で書けるのが大きなメリットです。
変換結果は 0 です。
エラーが起きてもプログラムは止まらずに、次の処理へ進めます。
4. try式でのfinallyブロックの扱い:後片付けの重要性
Kotlinのtry式では、エラーが発生したかどうかに関わらず、最後に必ず実行したい処理をfinallyブロックとして記述できます。例えば、開いたファイルを閉じたり、ネットワークの接続を切断したりといった「後片付け」によく使われます。
ここで初心者が間違えやすい重要なポイントは、「finallyブロックで計算した値は、変数の代入結果には反映されない」という点です。try式全体としての戻り値は、あくまでtryブロックまたはcatchブロックの最後に評価された値になります。
fun main() {
// resultにはtryまたはcatchの結果が入ります
val result = try {
println("計算を開始します")
10 / 2 // ここが成功すれば、resultは5になる
} catch (e: Exception) {
println("エラーが発生しました")
0 // エラー時はresultは0になる
} finally {
// このブロックは成功・失敗に関わらず、最後に必ず動きます
// ただし、ここでの計算や出力はresultの値には影響しません
println("リソースを解放するなどの後処理を完了しました")
}
println("最終的な計算結果: $result")
}
このプログラムを実行すると、以下の順序で出力されます。finally内のメッセージが表示された後、最終的な結果が表示されることが確認できます。
計算を開始します
リソースを解放するなどの後処理を完了しました
最終的な計算結果: 5
プログラミング未経験の方は、「finallyは結果を出すための場所ではなく、プログラムを安全に終了させるための『お掃除担当』である」とイメージしておくと、動作を理解しやすくなります。実際のアプリ開発でも、データの保存漏れやメモリの無駄遣いを防ぐために非常に重宝される仕組みです。
5. try式の中で関数を呼び出す方法と実用的なメリット
Kotlinのtry式は、単独で使うだけでなく、「関数」と組み合わせて使うことで真価を発揮します。関数の中で計算を行い、その結果をそのまま戻り値(返り値)として受け取ることができるため、コードが非常にスッキリとまとまります。
プログラミング未経験の方でも分かりやすいように、「割り算」を例に解説します。算数では数字を「0」で割ることはできませんが、コンピューターも同様に「0」で割ろうとするとエラーで止まってしまいます。これをtry式を使って「安全な計算機」にしてみましょう。
// 安全に割り算を行うための「専用の関数」を作成
fun safeDivide(a: Int, b: Int): Int {
// tryの結果がそのまま関数の戻り値(return)になります
return try {
a / b // 通常の計算を実行
} catch (e: ArithmeticException) {
// もし0で割るなどのエラーが発生したら、例外的に「-1」を返す
-1
}
}
fun main() {
// 10を0で割るという、本来ならエラーになる処理を呼び出す
val result = safeDivide(10, 0)
println("計算結果(エラー時は-1を表示): $result")
}
このプログラムを実行すると、本来なら赤い文字でエラーが表示されて止まってしまう場面でも、catchが身代わりとなってエラーを受け止め、-1という決まった数字を返してくれます。このように「異常事態を予測して、あらかじめ別の逃げ道(戻り値)を用意しておく」手法は、エラーに強いアプリ開発において欠かせないテクニックです。
計算結果(エラー時は-1を表示): -1
このように関数化しておくことで、プログラムの他の場所で割り算が必要になった際も、このsafeDivideを呼び出すだけで安全な処理が使い回せるようになります。シンプルですが、これが「堅牢なプログラム」を作る第一歩です。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
6. Javaとの違い:Kotlinは「try」も「return」も式としてスマートに書ける
プログラミング経験がない方にとって、「エラーが起きた時の処理」は少し難しく感じるかもしれません。Javaなどの従来の言語では、エラーが起きそうな場所をtryというブロックで囲い、その外側で結果を受け取る変数を用意する必要がありました。
しかし、Kotlinでは「try自体が値を持つ(式である)」という大きな特徴があります。これにより、関数の戻り値として直接tryの結果を返したり、変数に代入したりすることが可能です。コードがスッキリし、どこで値が決まるのかが一目でわかるようになります。
例えば、入力された文字を数字に変換する簡単なプログラムを見てみましょう。
fun getNumber(input: String): Int {
// tryの結果をそのまま関数の戻り値(return)として返せる
return try {
input.toInt() // 成功すれば、変換された数字が返る
} catch (e: NumberFormatException) {
-1 // エラー(数字以外が入力された等)なら、-1が返る
}
}
fun main() {
println(getNumber("100")) // 100が表示される
println(getNumber("あいう")) // エラーにならずに -1 が表示される
}
このように、Kotlinなら「成功した時の値」と「失敗した時の予備の値」をセットで美しく記述できます。Javaと比べて記述量が減るだけでなく、後からコードを読み返した際にも、処理の流れ(ロジック)を追いやすくなるのがKotlinならではのメリットです。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験