• トップ
  • ブログ一覧
  • 【第3回】KotlinとJavaの「条件分岐と範囲」の書き方を比較してみた
  • 【第3回】KotlinとJavaの「条件分岐と範囲」の書き方を比較してみた

    あっきー(エンジニア)あっきー(エンジニア)
    2019.04.24

    IT技術

    【第3回】JavaからKotlinへ変えていくためのお勉強

    秋山秋山さん

    (株)ライトコードの秋山(あきやま)です!

    Androidアプリ開発していくにあたり「JavaからKotlinへ変えていくためのお勉強」という記事を連載をしています。

    さて、前回は、「Kotlinの変数の扱い方」を勉強してみました。

    そして、今回は「Kotlinの条件分岐と範囲」をJavaと比較しながら勉強していきたいと思います!

    Java経験者の僕が、初歩からKotlinを解説していきますので、一緒に勉強していきましょう!

    第2回はこちら

    featureImg2019.04.10【第2回】KotlinとJavaの変数の扱いを比較してみた【第2回】JavaからKotlinへ変えていくためのお勉強秋山さん(株)ライトコードの秋山(あきやま)です!Andro...

    条件分岐と範囲

    今回は、条件分岐と範囲について解説していきます!

    それでは、簡単な「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}
    秋山秋山さん
    Javaの時は比較する値(num)を2回使わないと表現出来ませんでしたが、Kotlinでは1回で済むので簡潔に書けるようになりました!
    ミツオカミツオカ
    おお~!さすがKotlin~!

    文字の範囲: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の範囲内です"」の部分が戻り値となります。

    実際に、上記のような記述はあまり意味の無い感じですが、処理の流れとして見てください。

    秋山秋山さん
    Javaのように事前に変数を準備してエラーが起きないように初期値設定して・・・ということが無く、受け取ったタイミングで変数の宣言をして戻り値を最初に設定するので、こちらも記述がJavaと比べて簡潔になります
    ミツオカミツオカ
    わりとこういった、変数内の結果を次に使用することはあるので、しっかりと覚えておきましょう!

    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回へつづく!

    秋山秋山さん
    やりたい処理によって「if」「when」を使い分けて記述していきたいですね
    ミツオカミツオカ
    勉強になります~!
    秋山秋山さん
    それでは、KotlinとJavaの「条件分岐と範囲」の比較のお勉強を終わります!
    ミツオカミツオカ
    次回も続きま~す!お楽しみに!

    オススメ本

    基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン
    基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン

     

    第3回はこちら

    featureImg2019.04.24【第3回】KotlinとJavaの「条件分岐と範囲」の書き方を比較してみた【第3回】JavaからKotlinへ変えていくためのお勉強秋山さん(株)ライトコードの秋山(あきやま)です!Andro...

    こちらの記事もオススメ!

    featureImg2020.08.14スマホ技術 特集Android開発Android開発をJavaからKotlinへ変えていくためのお勉強DelegatedPropert...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    第1回はこちら

    Kotlinのお勉強2019.03.22【第1回】Android開発をJavaからKotlinへ変えていくためのお勉強<JavaとKotlin> 秋山さん(株)ライトコードの秋山です!最近、Androidアプリ開発していくにあたって、い...

    あっきー(エンジニア)

    あっきー(エンジニア)

    おすすめ記事