はじめに
こんにちは、今回は改めてKotlinの基本文法についてブログを書きたいと思います。何を今更と思わずに、お読みいただければと思います。
Android StudioでのKotlin開発環境の準備は前回のブログもご参照ください。
事前準備
Macをお使いの型は、Kotlinをすぐに手元で試せるようにREPL(Read Eval Print Loop)を準備しましょう。
まずは、HomebrewでKotlinのCUIコンパイラをインストールします。
1 2 | $ brew update $ brew install kotlin |
インストールに成功したら、下記でREPLが起動できます。
1 | $ kotlinc |
基本データ型
まずは、基本的なデータ型を紹介します。
型 | 説明 | 例 |
Double | 64ビット浮動小数点数 | 123.4 / 123.4e5 |
Float | 32ビット浮動小数点数 | 123.4f / 123.4F |
Long | 64ビット整数 | 1234 / 1234L |
Int | 32ビット整数 | 1234 / 0xAB / 0b1010 |
Short | 16ビット整数 | 1234 / 0xAB / 0b1010 |
Byte | 8ビット整数 | 123 / 0x0F / 0b1010 |
Boolean | 真偽値 | true / false |
Char | 文字 | ‘a’ / ‘0’ |
String | 文字列 | “Hello World\n” / “””hoge fuga””” |
注意点としては、下記のようにビット幅が小さい型の変数をビット幅が大きい型の変数に代入するときであっても、暗黙的型変換は行われません。(Javaでは可能です)
1 2 3 4 5 | >>> val intVal: Int = 1234 >>> val longVal: Long = intVal error: type mismatch: inferred type is Int but Long was expected val longVal: Long = intVal ^ |
Kotlinではこのような場合であっても、明示的に型変換をする必要があります。
1 2 | >>> val intVal: Int = 1234 >>> val longVal: Long = intVal.toLong() |
基本的なデータ型意外にも、配列、リスト、マップ、セットなどもありますが、これらの型については、次回にでもご紹介したいと思います。
変数
既に上記で変数が使われていますが、ここで改めて変数の宣言方法を説明します。
KotlinはJavaと同じく静的型付け言語となっていますので、変数にはあらかじめ代入することのできる型を定めておく必要があります。
再代入可の変数(var)と不可の変数(val)があり、下記のように宣言します。
1 2 | var 変数名: 型 = 式 val 変数名: 型 = 式 |
下記のREPLの実行結果のようにvarの場合は、再代入が可能ですが、valで再代入を行おうとするとエラーになります。
1 2 3 4 5 6 | >>> var intVar: Int = 1234 >>> intVar 1234 >>> intVar = 4321 >>> intVar 4321 |
1 2 3 4 5 6 7 8 | >>> val intVal: Int = 1234 >>> intVal 1234 >>> intVal = 4321 java.lang.IllegalAccessError: tried to access field Line9.intVal from class Line11 >>> intVal 1234 |
なお、Swiftと同様にKotlinにも宣言時の型推論があります。下記の2つはともにString型のgreeting変数となります。
1 | >>> val greeting: String = "Hello!!" |
1 | val greeting = "Hello!!" |
型推論を多様するとSwiftと同様にコンパイル時に時間がかかる可能性があるので、多用する場合は、よく調べてからのがよいと思います。
また、ここで文字列結合と文字列リテラルに式(変数)を埋め込む方法も紹介しておきます。
※文字列リテラルないで式部分の境界が明確である場合は、波括弧{}を省略できます。
1 2 3 4 5 6 7 | >>> val name = "Yamada Taro" >>> "Hello, " + name Hello, Yamada Taro >>> "Hello, ${name}" Hello, Yamada Taro >>> "Hello, $name" Hello, Yamada Taro |
条件分岐 if式
if式に関しては、改めて記載するまでもなく下記のような書き方になります。
1 2 3 4 5 6 7 8 9 | >>> val pageView: Int = 10000 >>> if (pageView > 10000) { ... print("Wow!!") ... } else if (pageView > 5000) { ... print("Good!!") ... } else { ... print("OK") ... } Good!! |
Kotlinにおいて、if式の面白いのは、最後に評価された値が返却されるというところにあり、下記のように使えます。
1 2 3 4 | >>> val score: Int = 80 >>> val resultMessage = if (score >= 80) "Grade A" else if (score >= 60) "Grade B" else "Grade C" >>> resultMessage Grade A |
条件分岐 when式
Javaで言うところのswitch文になりますが、Javaのswitch文と異なり、条件分岐の部分に式をかけたり、breakを明示的に記述する必要がなかったりします。また、if式と同じように最後に評価された値が返却されます。基本的な利用例だけ記載します。
1 2 3 4 5 6 7 8 9 | >>> val grade = "B" >>> val message = when (grade) { ... "A" -> "Excellent" ... "B", "C" -> "Good" ... "D" -> "Bad" ... else -> "Unknown" ... } >>> message Good |
繰り返し制御 while文
基本的にJavaと同じです、do-while文もありますが、while文だけ例を記載しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> var count = 0 >>> while (count++ < 10) { ... println("count is $count") ... } count is 1 count is 2 count is 3 count is 4 count is 5 count is 6 count is 7 count is 8 count is 9 count is 10 |
繰り返し制御 for文
for文の使い方もJavaと同様になりますが、いくつか例を記載しておきます。配列、レンジが使われていますが、そちらも今後のブログで紹介していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >>> for (greeting in arrayOf("Hello", "Bye", "See you")) { ... println(greeting) ... } Hello Bye See you >>> for (i in 1..10) { ... println("count is $i") ... } count is 1 count is 2 count is 3 count is 4 count is 5 count is 6 count is 7 count is 8 count is 9 count is 10 |
さいごに
いかがでしたでしょうか。今回は、Kotlinの本当に基本的な文法だけの紹介になります。今後は、配列、リスト、マップやNull安全などもブログで紹介してきますので、ぜひまたお読みいただければと思います。