【第3回】KotlinとJavaの「条件分岐と範囲」の書き方を比較してみた
IT技術
【第3回】JavaからKotlinへ変えていくためのお勉強
(株)ライトコードの秋山(あきやま)です!
Androidアプリ開発していくにあたり「JavaからKotlinへ変えていくためのお勉強」という記事を連載をしています。
さて、前回は、「Kotlinの変数の扱い方」を勉強してみました。
そして、今回は「Kotlinの条件分岐と範囲」をJavaと比較しながら勉強していきたいと思います!
Java経験者の僕が、初歩からKotlinを解説していきますので、一緒に勉強していきましょう!
第2回はこちら
条件分岐と範囲
今回は、条件分岐と範囲について解説していきます!
それでは、簡単な「if文」から見ていくことにしましょう!
Javaの場合
「200以下」か「200より上」かを判定する簡単なif文を作ってみました。
Javaで書くと以下の通りとなります。
1// 宣言
2int num = 123;
3
4// 判定とコンソール表示
5if (num <= 200) {
6 System.out.println(num + "は、200以下です");
7} else {
8 System.out.println(num + "は、200より上です");
9}
[結果]
123は、200以下です
Kotlinの場合
同様の文をKotrinで書く場合はこのようになります。
1// 宣言
2val num = 123
3
4// 判定とコンソール表示
5if (num <= 200) {
6 println("${num}は、200以下です")
7} else {
8 println("${num}は、200より上です")
9}
[結果]
123は、200以下です
判定自体は変わりませんね。
Javaの場合
上の条件を「0以上かつ200以下である」といった条件に切り替えてみたいと思います。
1// 宣言
2int num = 123;
3
4// 判定とコンソール表示
5if (0 <= num && num <= 200) {
6 System.out.println(num + "は、0から200の範囲内です");
7} else {
8 System.out.println(num + "は、0から200のの範囲外です");
9}
Kotlinの場合
Kotlinに置き換えるとこんな感じで書くことができます。
1// 宣言
2val num = 123
3
4// 判定とコンソール表示
5if (0 <= num && num <= 200) {
6 println("${num}は、0から200の範囲内です")
7} else {
8 println("${num}は、0から200の範囲内です")
9}
整数の範囲:IntRange型
上記のKotlinのコードの条件式の
1if (0 <= num && num <= 200) {
この部分は、Kotlinでは、以下のようにも記述することが出来ます。
1if (num in 0..200) {
『比較する値 in 最小値..最大値』という式となります。
IntRange型
このように整数の「最小値 <= X <= 最大値」といった範囲の表現は「最小値..最大値」という形で表すことができます。
これは「IntRange型」と呼ばれます。
1val range: IntRange = 0..200
2あるいは
3val range = 0..200 // 型推論
これを踏まえると先ほどの記述は、以下のようにあらわすことができます。
1// 宣言
2val num = 123
3val range = 0..200
4
5// 判定とコンソール表示
6if (num in range) {
7 println("${num}は、0から200の範囲内です")
8} else {
9 println("${num}は、0から200の範囲外です")
10}
文字の範囲:CharRange型
また、整数だけではなく、文字の範囲を判定するものもあります。
文字の範囲は「CharRange型」というのが用意されています。
1// 宣言
2val char1 = 'D'
3val cRange1: CharRange = 'B'..'F'
4
5// 判定とコンソール表示
6if (char1 in cRange1) {
7 println("${char1}は、BからFの範囲内です")
8} else {
9 println("${char1}は、BからFの範囲外です")
10}
[結果]
DはBからFの範囲内です
大文字と小文字
また、大文字と小文字は区別されます。
1// 宣言
2val char2 = 'd' // 小文字が対象の場合
3val cRange2: CharRange = 'B'..'F' // 大文字のBからFが対象
4
5// 判定とコンソール表示
6if (char2 in cRange2) {
7 println("${char2}は、BからFの範囲内です")
8} else {
9 println("${char2}は、BからFの範囲外です")
10}
[結果]
dは、BからFの範囲外です
ひらがな
英字だけでなく、ひらがなでも範囲を判定することが出来ます。
1// 宣言
2val char3 = 'え' //ひらがなを判定の対象とする
3val cRange3: CharRange = 'あ'..'お' // 「あ」から「お」の間を判定
4
5
6// 判定とコンソール表示
7if (char3 in cRange3) {
8 println("「${char3}」は、「あ行」です")
9} else {
10 println("「${char3}」は、「あ行」ではありません")
11}
[結果]
「え」は、「あ行」です
if文の戻り値
if文の使い方によっては、判定後の結果を次の処理に使いたい時があるかと思います。
まずは、Javaでの例を見てみましょう。
Javaの場合
1// 宣言
2int num = 123;
3String ans = ""; // if文の結果を受け取る変数
4
5// 判定
6if (0 <= num && num <= 200) {
7 ans = num + "は0と200の範囲内です";
8} else {
9 ans = num + "は0と200の範囲外です";
10}
11
12// コンソール表示
13System.out.println(ans);
[結果]
123は0と200の範囲内です
if文の箇所では、判定結果をあらかじめ用意していた変数に入れるだけにし、その後の処理でその変数を表示する、といった流れです。
これをKotlinで書くとどうなるか見ていきましょう!
Kotlinの場合
1// 宣言
2val num = 123
3
4// 判定
5val ans = if (num in 0..200) {
6 "${num}は0と200の範囲内です"
7} else {
8 "${num}は0と200の範囲外です"
9}
10
11// コンソール表示
12println(ans)
[結果]
123は0と200の範囲内です
Kotlinでは、上記のように、if文を式として扱うことができます。
また、通った方のブロック内の最後の値が戻り値として渡されます。
1// 判定
2var ans = if (num in 0..200) {
3 "テスト1"
4 "${num}は0と200の範囲内です"
5} else {
6 "テスト2"
7 "${num}は0と200の範囲外です"
8}
最後の値というのは、上記のようにブロック内にいろんな処理があったとしても、戻されるのは一番最後の「"${num}は0と200の範囲内です"」の部分が戻り値となります。
実際に、上記のような記述はあまり意味の無い感じですが、処理の流れとして見てください。
whenの扱い方
Kotlinには、条件判断として「when」というものがあります。
まずは、簡単な例を見てみましょう!
Kotlinの「when」について
1// 宣言
2val num = 3
3
4//判定とコンソール表示
5when (num) {
6 1 ー> {
7 println("いち")
8 }
9 2 ー> {
10 println("に")
11 }
12 3 ー> {
13 println("さん")
14 }
15 else ー> {
16 println("その他")
17 }
18}
[結果]
さん
また、判定の値を「,」で区切ることによって
1// 宣言
2val num = 4
3
4//判定とコンソール表示
5when (num) {
6 1 ー> {
7 println("いち")
8 }
9 2 ー> {
10 println("に")
11 }
12 3, 4 ー> {
13 println("さん、または、し")
14 }
15 else ー> {
16 println("その他")
17 }
18}
[結果]
さん、または、し
(num == 3 || num == 4)のようなor判定が出来ます。
上記は「when」の右横に引数(num)を準備しましたが、以下のように「when」の右横に引数を置かずに、各判定箇所にそれぞれの判定式を置く書き方もあります。
1// 宣言
2val num = 4
3
4//判定とコンソール表示
5when {
6 (num == 1) ー> {
7 println("いち")
8 }
9 (num == 2) ー> {
10 println("に")
11 }
12 (num == 3 || num == 4) ー> {
13 println("さん、または、し")
14 }
15 else ー> {
16 println("その他")
17 }
18}
[結果]
さん、または、し
また、「when」も「if」と同様に式として扱うことが出来るので、下記のような書き方も出来ます。
1// 宣言
2val num = 3
3
4//判定
5val ans = when (num) {
6 1 ー> {
7 "いち"
8 }
9 2 ー> {
10 "に"
11 }
12 3 ー> {
13 "さん、または、し"
14 }
15 else ー> {
16 "その他"
17 }
18}
19
20//コンソール表示
21println(ans)
[結果]
さん、または、し
第3回へつづく!
オススメ本
第3回はこちら
こちらの記事もオススメ!
2020.08.14スマホ技術 特集Android開発Android開発をJavaからKotlinへ変えていくためのお勉強DelegatedPropert...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
第1回はこちら
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
あっきー(エンジニア)
元ファストフード店長代理のJava系ITエンジニア。 Webサイト系の開発や運用をいくらか経験し、 現在はAndroidアプリ開発を主に担当したり。 休みの日はゲームとか風景写真撮りに行ったりとかマラソンしたりとか。
おすすめ記事
移転したライトコード大阪オフィスを調査せよ!
広告メディア事業部
2024.04.03
日常
【GCP】BIG QUERYを触り程度に理解してみる
かねまさ(エンジニア)
2024.04.02
IT技術
【Android】Github ActionsでFirebase Test Labの実行を分散する
笹川(エンジニア)
2024.04.02
IT技術
【Next.js】App Router で使用できるキャッシュまとめ
モーリー(エンジニア)
2024.03.29
IT技術
GitHubActionsのランナーに触れてみた
こやまん(エンジニア)
2024.03.28
IT技術