【第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アプリ開発を主に担当したり。 休みの日はゲームとか風景写真撮りに行ったりとかマラソンしたりとか。