Kotlinで条件式をネストする方法!多段条件分岐の基本を解説
生徒
「先生、Kotlinで条件をいくつも組み合わせて判断したいときはどう書くんですか?」
先生
「それはifの中にifを入れる“ネスト”という書き方を使います。多段条件分岐とも呼ばれ、複数の条件を順番にチェックできます。」
生徒
「初心者の僕でも書けるようになりますか?」
先生
「もちろんです。わかりやすい手順と例で、一緒に見ていきましょう!」
1. 条件式をネストするとは?
条件式のネストとは、「もしAならこう、じゃなければBの中でもさらに判断して…」という、複数段階で判断をくわえる方法です。初心者の方にも、わかりやすく言えば、料理で「もし甘いなら砂糖を減らす、でも酸っぱいなら砂糖を増やす」ような手順をそのままプログラムにするイメージです。
if文は通常、if(条件){…} else {…}ですが、そのelseの中にまたifを書いて「ネスト(入れ子)」にします。
2. ネストの基本例
では、例を見てみましょう。年齢によって「子供」「成人」「高齢者」に分ける場合です。
fun main() {
val age = 70
if (age < 20) {
println("子供")
} else {
if (age < 65) {
println("成人")
} else {
println("高齢者")
}
}
}
このコードでは、最初に「20未満か」を調べ、違っていたらさらに「65未満か」で判断しています。3種類を分けられる「多段条件分岐」の典型的な使い方です。
3. else if を使ってスッキリ書く
Kotlinでは、elseの中にわざわざifと書かなくても、else ifを使えばもっとスッキリ書けます。
fun main() {
val age = 70
if (age < 20) {
println("子供")
} else if (age < 65) {
println("成人")
} else {
println("高齢者")
}
}
このようにすると、「ネストが浅くなって見やすい」「追加の条件も簡単に増やせる」というメリットがあります。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
4. 複数条件をネストするときの注意点
ネストするときは、
- 条件の順番:上から順にチェックされます。重要な条件は先に書きましょう。
- インデント(字下げ):コードが深くなると見にくくなるので、インデントをきちんと整えることが大切です。
- 評価の重複:同じ条件を何度も書かないように注意が必要です。
5. if式で値を返すパターン
さらに、if式は「値として使える」ので、ネストして値を返すこともできます。関数や変数の代入で使うときに便利です。
fun category(age: Int): String {
return if (age < 20) {
"子供"
} else if (age < 65) {
"成人"
} else {
"高齢者"
}
}
println(category(70)) // 高齢者
このように書くと、「関数の返り値」を条件に応じて返す多段条件分岐になります。
6. when式でネストを簡単にする方法
Kotlinには、when式というswitchに似た構文があり、ネストを減らしてもっと分かりやすく書けます。
fun category2(age: Int): String {
return when {
age < 20 -> "子供"
age < 65 -> "成人"
else -> "高齢者"
}
}
println(category2(70)) // 高齢者
この方法なら、else ifよりもさらにシンプルに条件分岐をまとめて扱えます。
7. ネスト条件分岐の書き方
多段条件分岐の基本としては、
if文でネストして段階的に判断else ifを使ってスッキリwhen式でさらにわかりやすく
初心者でも「条件を順番に並べて判断する」流れがイメージできれば、ネストもすぐに使いこなせます。
まとめ
Kotlinの条件式をネストして多段条件分岐を書く方法を学ぶことで、ひとつのif文だけでは表現しきれない複雑なロジックを整理して書けるようになります。年齢から「子供」「成人」「高齢者」を判定するような分類処理、点数からランクを決める判定処理、フラグや状態の組み合わせで挙動を切り替える処理など、実際のアプリケーション開発では条件をいくつも組み合わせる場面がとても多くあります。今回の記事では、まずネストしたif文の基本から始めて、else ifを使った多段条件分岐、さらにKotlinらしいwhen式による条件分岐へと段階的に理解を深めてきました。
とくに、条件式をネストする最初のステップとして「ifの中にifを書く」という書き方を確認し、次にelseの中のifを整理してelse ifで書き直す流れを体験したことで、「最初はネストが深くても、あとから見通しの良い多段条件分岐に整理できる」という感覚をつかめたはずです。また、Kotlinでは条件式を式として扱えるため、関数の戻り値や変数の代入にそのまま使えることも重要なポイントです。単に「分岐するための命令」ではなく「値を返す式」として意識すると、ロジック全体をすっきりまとめる設計がしやすくなります。
さらに、同じ多段条件分岐でも、when式を使うことでネストをほとんど意識せずに書けることも確認しました。条件が増えてくると、ifとelse ifの組み合わせだけではインデントが増え、上から下へ読むときにパッと頭に入りにくくなります。そこで、Kotlinのwhenを使うと「年齢がこの範囲ならこの結果」というように、条件と結果の対応を一覧表のように並べることができ、可読性の高い条件分岐になります。条件式をネストする力と、when式で見通しよく書き直す力の両方を身につけることで、Kotlinの条件分岐を自在に扱えるようになるでしょう。
また、多段条件分岐を書くときに忘れてはいけないのが条件の順番とインデントです。記事でも触れたように、条件式は上から順番に評価されるため、最初にチェックしておきたい重要な条件は上側に書くのが定石です。先に範囲の広い条件を書いてしまうと、その下に続く条件が一度も評価されない場合があり、思わぬバグにつながります。インデントに関しても、ネストが深くなるほど読みにくくなるので、「これ以上深くなりそうならwhen式に変える」「関数を分けて責務を細かくする」といった工夫が大切です。
ここで、記事の内容を踏まえた少し発展的なサンプルとして、年齢と会員ランクを組み合わせてメッセージを出し分ける多段条件分岐のコードを掲載します。ネストしたif、else if、when式の使い分けを意識しながら眺めることで、Kotlinの条件式設計のイメージがより具体的になるはずです。
応用サンプルプログラム:年齢と会員ランクの多段条件分岐
fun memberMessage(age: Int, rank: String): String {
return if (age < 20) {
if (rank == "VIP") {
"未成年の特別会員です"
} else {
"未成年の一般会員です"
}
} else if (age < 65) {
if (rank == "VIP") {
"成人のプレミアム会員です"
} else {
"成人の標準会員です"
}
} else {
if (rank == "VIP") {
"高齢の優待会員です"
} else {
"高齢の通常会員です"
}
}
}
fun memberMessageWhen(age: Int, rank: String): String {
val ageCategory = when {
age < 20 -> "未成年"
age < 65 -> "成人"
else -> "高齢"
}
val rankLabel = when (rank) {
"VIP" -> "特別"
"PREMIUM" -> "上位"
else -> "一般"
}
return "${ageCategory}の${rankLabel}会員です"
}
最初のmemberMessage関数は、ネストしたifをそのまま使って多段条件分岐を書いた例です。年齢による分類の中に、さらに会員ランクの判定をネストしています。条件式のネストをそのまま表現しているため、「年齢とランクの組み合わせでどのメッセージになるか」を素直に追いかけることができます。一方で、ネストが深くなってきたときにどこまでがどの条件なのかを見失わないように、インデントの揃え方に注意する必要があります。
二つ目のmemberMessageWhen関数では、同じような判定をwhen式を使って整理し、年齢カテゴリーとランクラベルをそれぞれ別々の条件分岐に分解しています。まずwhenで年齢から「未成年」「成人」「高齢」を決め、次にランクから「特別」「上位」「一般」を決め、その二つを文字列として組み合わせることで最終的なメッセージを生成しています。このように条件を分けて考えると、処理の意図がよりはっきりし、条件式を後から変更したり追加したりするのも簡単になります。
条件式をネストして多段条件分岐を設計するときには、「ひとつのifの中に複数の役割を詰め込みすぎていないか」「else ifにまとめて書けないか」「when式に置き換えることで表が並んだように見せられないか」を意識することが大切です。Kotlinには、if文、else if、when式、さらには条件に応じた値の返却を組み合わせる豊富な表現力があります。今回のまとめで紹介した考え方とサンプルコードを手元で動かしながら、自分なりの分岐パターンを試してみると、条件式のネストへの苦手意識も自然と薄れていくでしょう。
生徒
「先生、きょうは条件式のネストと多段条件分岐をたくさん見て、頭の中のイメージがかなり整理されました。単にif文を増やすだけじゃなくて、どう並べるかが大事なんですね。」
先生
「その通りです。同じ結果を出すプログラムでも、条件の順番やネストの深さによって読みやすさが大きく変わります。Kotlinではif文だけでなくwhen式も使えるので、どの書き方がいちばん分かりやすいか考えながら組み立てていくと良いですよ。」
生徒
「年齢で子供と成人と高齢者を分ける例や、会員ランクを組み合わせる例を見て、実際のアプリでもそのまま使えそうだと感じました。特にwhen式の書き方は、表みたいに条件が並んでいて読みやすかったです。」
先生
「実務的なロジックほど、条件が増えていきますからね。最初はネストしたifで素直に書いてから、必要に応じてelse ifやwhen式にリファクタリングする流れを覚えておくと、後からコードを見直すときにとても助かります。」
生徒
「インデントも大事だという話も印象に残りました。ネストが深くなってくると、どのかっこがどのif文に対応しているのか分からなくなりがちなので、なるべく浅くしておくように心がけたいです。」
先生
「その意識はとても大切ですね。もしネストが深くなりそうなときは、処理を小さな関数に分けたり、when式に置き換えられないか検討してみてください。多段条件分岐をどう整理するかは、設計力を鍛える良い練習にもなります。」
生徒
「きょう学んだネストしたif文、else if、when式の三つの書き方を意識して、これから自分のコードでも積極的に試してみます。条件が増えても怖がらずに、順番と見やすさを考えながら組み立てていきたいです!」
先生
「とても良い心がけですね。Kotlinの条件式に慣れてくると、ロジックの整理も楽しくなってきますよ。これからも身近な例を思い浮かべながら、多段条件分岐の練習を続けていきましょう。」