【第4回】KotlinとJavaの「繰り返し文」の書き方を比較してみた
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 の感覚に近いですね。
- 変更が無いデータは、List型を使う
- 変更があるデータは、MutableList型を使う
このように使い分けていきましょう。
KotlinのMap
続いて、「Map」について解説します!
まずは、JavaでのMapの使い方を見ていきたいと思います。
Javaで書く場合
1//宣言(key=String型、value=String型で初期値を3つ入れたもの)
2Map<String, String> map = new HashMap<String, 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回へつづく!
オススメ本
こちらの記事もオススメ!
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技術