• トップ
  • ブログ一覧
  • 【第4回】KotlinとJavaの「繰り返し文」の書き方を比較してみた
  • 【第4回】KotlinとJavaの「繰り返し文」の書き方を比較してみた

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

    IT技術

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

    秋山秋山先生

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

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

    前回は、「Kotlinの条件分岐と範囲」を勉強してみました。

    そして、今回は「Kotlinの繰り返し文」をJavaと比較しながら勉強していきたいと思います!

    基礎的なことが続いて飽きてくる頃かとは思いますが、もう少しだけ基礎勉強の記事を書こうと思います!

    Kotlinのfor文(範囲)

    まずは、繰り返し文からいってみましょう!

    Javaでは、繰り返し文として for文が用意されていましたよね。

    Javaで書く場合

    1//0〜4までの繰り返し
    2for (int i = 0; i < 5; i++) {
    3    System.out.println( i + "回目の表示です");
    4}

    [結果]
    0回目の表示です
    1回目の表示です
    2回目の表示です
    3回目の表示です
    4回目の表示です

    これを Kotlin で書くとこのようになります。

    Kotlinで書くと

    1for (i in 0..4) {
    2    println("${i}回目の表示です")
    3}

    [結果]
    0回目の表示です
    1回目の表示です
    2回目の表示です
    3回目の表示です
    4回目の表示です

    Kotlin では「(変数名 in 範囲)」といった形で記述することが出来ます。

    ここで気をつけておきたいのは、範囲の最後の数字も含まれるといったところです。

    上記の場合は、「0..4」は「0<= i && i <=4」という意味となります。

    Kotlinのfor文(指定した数だけ加算)

    先ほどは1ずつ加算しましたが、1以外の数で加算する場合はどうでしょうか。

    では、「3ずつ加算」した場合の例を見ていきたいと思います。

    Javaで書く場合

    1for (int i = 0; i < 10; i+=3) {
    2    System.out.println( i + "回目の表示です");
    3}

    [結果]
    0回目の表示です
    3回目の表示です
    6回目の表示です
    9回目の表示です

    と、このような感じになります。

    Kotlinで書くと

    1for (i in 0..9 step 3) {
    2    println("${i}回目の表示です")
    3}

    [結果]
    0回目の表示です
    3回目の表示です
    6回目の表示です
    9回目の表示です

    と、このように範囲の右横に「step 数値」と書くことができます。

    Kotlinのfor文(指定した数だけ減算)

    次に、減算の場合をご説明します。

    以下のように、範囲の部分が「開始の数 downTo 終了の数」とすることで「1ずつ減算」します。

    1for (i in 5 downTo 1) {
    2    println(${i}回目の表示です")
    3}

    【結果】
    5回目の表示です
    4回目の表示です
    3回目の表示です
    2回目の表示です
    1回目の表示です

    指定した数だけ減算

    1以外の減算をしたい場合は加算の時と同様に「終了の数」の右横に「step 減算したい数」と記述してください。

    1for (i in 10 downTo 1 step 3) {
    2    println("${i}回目の表示です")
    3}

    [結果]
    10回目の表示です
    7回目の表示です
    4回目の表示です
    1回目の表示です

    Kotlinの配列

    次に、配列について見ていきます。

    まずは、Javaの「boolean型」「int型」「double型」「String型」の例から見ていきたいと思います!

    Javaで書く場合

    1//boolean型
    2boolean bls[] = {true, false, false};
    3
    4//int型
    5int nums[] = {1, 3, 5};
    6
    7//double型
    8double dbls[] =  {1.0, 4.2, 8.5, 10.6};
    9
    10//String型
    11String[] strs = {"test1", "test2", "test3"};

    他にもいろんな型がありますがひとまずはこんなところで。

    これらを Kotlin で表すと以下のようになります。

    Kotlinで書く場合

    1//boolean型
    2val bls = booleanArrayOf(true, false, false)
    3
    4//int型
    5val nums = intArrayOf(1, 3, 5)
    6
    7//double型
    8val dbls = doubleArrayOf(1.0, 4.2, 8.5, 10.6)
    9
    10//String型(「arrayOf」は数値以外で利用可能)
    11val strs = arrayOf("test1", "test2", "test3")

    基本的にboolean型や数値型に関しては「型名ArrayOf」の形式で書くことになります。

    それ以外は「arrayOf」を使用する感じです。

    また、以下のようにint型で枠の数だけ準備する場合は、このように書きます。

    Javaで書いた場合

    1int[] nums = new int[6]; // int型の初期値0が6つ

    Kotlinで書く場合

    1var nums = IntArray(6) // int型の初期値0が6つ

    また、String型の場合は、以下のように「arrayOfNulls<型名>(数)」となります。

    Javaで書いた場合

    1String[] strs2 = new String[2]; // String型の初期値nullが2つ

    Kotlinで書く場合

    1var strs2 = arrayOfNulls<String(2) // String型の初期値nullが2つ

    null が初期値となりますので、そのあとの変数は null が許容できるようにしていきましょう。

    KotlinのList

    次に、List について解説していきます。

    それでは、String型を格納していく List を見ていきます!

    Javaで書く場合

    1//宣言(ListにString型の値を3つ初期値として入れる)
    2List<String> list = new ArrayList<>(Arrays.asList("test1", "test2", "test3"));
    3
    4//追加
    5list.add("test4");
    6
    7//listの中身確認
    8for(String s : list){
    9    System.out.println(s);
    10}

    [結果]
    test1
    test2
    test3
    test4

    これを Kotlin で表現すると以下のような形になります。

    kotlin には、後から変更が出来ない「List」と、後から変更が出来る「MutableList」があります。

    Kotlinで書いた場合

    1//宣言(ListにString型の値を3つ初期値として入れる)
    2var list = listOf("test1", "test2", "test3")
    3
    4//        list.add("test4")  // ←追加出来ない
    5
    6//listの中身確認
    7for (s in list) {
    8     println(s)
    9}

    [結果]
    test1
    test2
    test3

    Listの場合、後から値を追加したり変更することが出来ません

    MutableList

    続いて、MutableList を見ていきます。

    1//宣言(MutableListにString型の値を3つ初期値として入れる)
    2var list = mutableListOf("test5", "test6", "test7")
    3
    4list.add("test8") // ←追加出来る
    5
    6//listの中身確認
    7for (s in list) {
    8    println(s)
    9}

    [結果]
    test5
    test6
    test7
    test8

    MutableList では後から追加や変更が出来ます。

    こちらのほうが Java の List の感覚に近いですね。

    1. 変更が無いデータは、List型を使う
    2. 変更があるデータは、MutableList型を使う

    このように使い分けていきましょう。

    KotlinのMap

    続いて、「Map」について解説します!

    まずは、JavaでのMapの使い方を見ていきたいと思います。

    Javaで書く場合

    1//宣言(key=String型、value=String型で初期値を3つ入れたもの)
    2MapString, String> map = new HashMapString, String() {
    3    {
    4        put("one", "1st");
    5        put("two", "2nd");
    6        put("three", "3rd");
    7    }
    8};
    9
    10//Mapにデータを追加
    11map.put("four", "test4");
    12
    13//Mapの中身確認
    14for (Map.Entry<String, String> m : map.entrySet()) {
    15    System.out.println("key = " + m.getKey() + " : value = " + m.getValue());
    16}

    [結果]
    key = four : value = test4
    key = two : value = 2nd
    key = one : value = 1st
    key = three : value = 3rd
    ※取り出される順番は決まっていない

    次に、同様の処理をKotlinで記述します。

    Map型もList型と同様に後から変更が出来ない「Map」と、後から変更が出来る「MutableMap」があります。

    また、Mapのデータを取得する例として、「for ((キーの変数名, 値の変数名) in map変数名)」の繰り返し文を利用してみたいと思います。

    Kotlinで書いた場合

    1//宣言(key=String型、value=String型で初期値を3つ入れたもの)
    2var map = mapOf("one" to "1st", "two" to "2nd", "three" to "3rd")
    3
    4//        map.put("four", "test4") // ←追加出来ない
    5
    6//mapの中身確認
    7for ((key, value) in map) {
    8    println("key = ${key} : value = ${value}")
    9}

    [結果]
    key = one : value = 1st
    key = two : value = 2nd
    key = three : value = 3rd

    ※取り出される順番は決まっていない

    初期値を入れる場合は「(キー1) to (値1), (キー2) to (値2), ...」といった形になります。

    こちらも初期値として入れたデータ以降、変更は出来ないようになっています。

    後から変更が出来る「MutableMap」

    Map の中身を変更出来るようにしたい時は「MutableMap」を使用します。

    1//宣言(key=String型、value=String型で初期値を3つ入れたもの)
    2var map = mutableMapOf("one" to "1st", "two" to "2nd", "three" to "3rd")
    3
    4map.put("four", "test4") // ←追加出来る
    5
    6//mapの中身確認
    7for ((key, value) in map) {
    8    println("key = ${key} : value = ${value}")
    9}

    [結果]
    key = one : value = 1st
    key = two : value = 2nd
    key = three : value = 3rd
    key = four : value = test4

    //※取り出される順番は決まっていない

    Java を使ってた私としては、こっちのほうが自然で使いやすそうかなと感じました。

    とはいえ、List と同様に必要に応じて使い分けていければベストですね!

    第4回へつづく!

    秋山秋山先生
    さて、これまでは、勉強編として「変数」「条件分岐」「範囲」「繰り返し文」についてJavaとkotlinの比較をしながら紹介していきました!
    ミツオカミツオカ
    とっても勉強になりました~!
    秋山秋山先生
    それでは、次の回からは実際にアプリ実装をしていきたいと思います!
    ミツオカミツオカ
    ついにアプリ実装編に!次回もお楽しみに!

    オススメ本

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

     

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

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

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

    第1回はこちら

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

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    あっきー(エンジニア)

    あっきー(エンジニア)

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background