最初に
Kotlinって便利!でも現状Javaも使わなきゃ。あれってKotlinでどうやるんだっけ?
ということでチートシートを作成しました。すぐさま実行出来るコード付き。
Kotlinって何?
KotlinはJavaプラットフォーム上の新しい言語で、Javaとの互換運用が可能な静的型付き言語。
「実用主義、簡潔、安全」を目指した言語であり、Javaよりもシンプル、そしてJavaで陥りがちなミスを未然に防いでくれる実用的な言語である。 Javaとの相互運用性があるため、Javaのプログラムを簡単にKotlinから利用することが可能。Java経験者にとって学習コストが小さいのも魅力だ。Kotlinデータタイプ
タイプ | ビット幅 | 種類 | 例 |
---|---|---|---|
Double | 64 | 浮動小数点 | 12345.6 |
Float | 32 | 浮動小数点 | 12345.6f |
Long | 64 | 整数 | 123456L 999_99_9999L 0xFF_EC_DE_5E |
Int | 32 | 整数 | 123456 0xFF_FF |
Short | 16 | 整数 | 32767 0x0F |
Byte | 8 | 整数 | 127 0b1010 |
String | - | 文字列 | "Hello, world!\n" |
Kotlin変数と定数
変数 var
var a: Float
a = 12345.6f
定数 val
val a: Int = 10000
val b = 10_000L // アンダースコアで区切って桁を見やすくする
宣言と初期化は同時でなくても良い。
val c: Double
c = 12345.6
Kotlin制御構文
If式
if(true)
println("Hello")
if(false){
println("Hello")
} else if(true) {
println("Kotlin")
} else {
println("World!")
}
式なので結果を代入可能。最後に評価される式が返る。
val max = if (a > b) {
print("a is greater than b")
a
} else {
print("a is less than b")
b
}
When式
when (a) {
1 -> println("a == 1")
2,3 -> println("a == 2 or a == 3")
else -> {
println("otherwise")
}
}
inで範囲を指定。
when (a) {
in 1..10 -> println("a is in the range")
!in 10..20 -> println("a is outside the range")
else -> println("otherwise")
}
Forループ
for (a in 1..10) println(a)
for (a in 'Z' downTo 'A') print(a)
コレクション
val array = arrayOf(297456, 119243,9,30)
for (a in array) {
println(a)
}
インデックスを使いたい場合
val array = arrayOf(297456, 119243,9,30)
for (i in array.indices) {
println(array[i])
}
Whileループ
Javaと同じ。
var x = 10
while (x > 0) {
println(x--)
}
do-while
do{
println("i = " + i--)
}while(i > 4)
Kotlinデータ変換
文字列を数値へ
val intVal: Int = str.toInt()
val intValOrNull: Int? = str.toIntOrNull()
val doubleVal = str.toDouble()
各タイプから文字列へ
val intStr = num.toString()
数値のキャスト(例:IntからLongへの変換)
val long= int.toLong()
日付の処理
Kotlin算術演算子
Javaと同じ
使用例 | 意味 | 使用例 | 意味 |
---|---|---|---|
x + y | 加算 | x - y | 減算 |
x * y | 乗算 | x / y | 除算 |
x % y | 剰余 | ||
++x / x++ | インクリメント | --y / y-- | デクリメント |
Kotlinブール演算子
Javaと同じ
a && b (and)
a || b (or)
!a (not)
Kotlin文字列
val multiline = """
for (c in "foo"){
print(c)
}
"""
val withTrim = """
|for (c in "foo"){
| print(c)
|}
""".trimMargin()
Kotlin文字列テンプレート
val str = "Hello Kotlin!"
val templete = " $str is ${str.length} characters."
// >Hello Kotlin! is 13 characters.
$をそのまま出力したい時
val price = 200
val multiline = """
|This is ${'$'}$price.
""".trimMargin()
Kotlin比較演算子
ほとんどJavaと同じだが、「==」はJavaのequalsと同等。オブジェクト比較はKotlinでは「===」になる。
使用例 | 意味 | 使用例 | 意味 |
---|---|---|---|
x < y | xが小さい | x <= y | xが小さいまたは同じ |
x > y | xが大きい | x >= y | xが大きいまたは同じ |
x == y | 同じ | x != y | 異なる |
x === y | オブジェクトが同じ | x !== y | オブジェクトが異なる |
Kotlin文字列関数
例 | 意味 |
---|---|
s.length | sの長さ |
s.count() | sの長さ |
s[i] | i番目の文字 |
s.substring(start..end) | startからendまでの部分文字列 |
s.substring(start,end) | startからend-1までの部分文字列 |
s.toUpperCase() | 大文字変換 |
s.toLowerCase() | 小文字変換 |
s.indexOf('x') | 'x'が最初に出現するインデックス |
s.replace(old,new) | 文字列の置き換え |
s.replaceFirst(old,new) | 最初に見つかった文字列の置き換え |
s.split(regex) | 分割する |
s.trim() | 前後のホワイトスペースを除去 |
s.startsWith(prefix) | 文字列がfrefixで始まるならtrueを返す |
s.endsWith(suffix) | 文字列がsuffixで終わるならtrueを返す |
Kotlinコレクション
List
読み取り専用List
val items = listOf(1, 2, 3)
println(items)
変更可能なList
val numbers: MutableList<Int> = mutableListOf(1, 2, 3)
numbers.add(4)
Set
読み取り専用Set
var strings: Set<String> = setOf("A","B","C")
変更可能なSet
var stringSet: MutableSet<String> = mutableSetOf("x","y","z")
stringSet.add("a")
stringSet.filter { it != "x"}
Map
読み取り専用Map
val fruits = mapOf("apple" to 1, "orange" to 2, "banana" to 3)
変更可能なMap
val readWriteMap = mutableMapOf("apple" to 1, "orange" to 2, "banana" to 3)
readWriteMap.put("melon",4)
Kotlin関数
Kotlinの関数はキーワードfunで定義する
fun times(a: Int, b: Int): Int {
return a * b
}
関数の実行
val result = times(2,5)
関数本体が1つの式で構成される場合は中括弧を省略し=の後ろに式を書く事ができる。戻り値は推論により省略可能。
fun times(a: Int, b: Int) = a * b
引数にはデフォルト値を指定可能。関数を呼び出す時、引数の名前を指定可。
val result = makeString(base = "world ", concl = "of Kotlin!")
Kotlinクラス
open class Parent{
open fun show() = println("This is Parent")
}
class Child:Parent(){
override fun show() = println("This is Child")
}
イニシャライザ:初期化コードはinitブロックを使用する
class Person(val name: String, val isMan:Boolean, var favorite:String ){
init {
val s = if(isMan) "He" else "She"
favorite = "$s liles $favorite"
}
}
Kotlinデータクラス
data class と定義することでequals、hashCode、toString、copyが自動生成される。
data class Dog(val name: String)
オブジェクト式
Javaの無名クラスにあたる機能。
object:継承Class(Interface)名{実装}
view.setOnClickListener(object: View.OnClickListener {
override fun onClick(v: View?) {
view.text = "clicked"
}
})
Kotlinラムダ式
{変数:型 -> 処理}
ラムダ式は変数に格納できる
val minus = {x: Int, y: Int -> x - y }
ラムダ式の引数が1つの場合、引数を省略し暗黙の引数itが使える
val double:(Int)->Int = {it * 2}
Javaとの相互運用
java.lang.Classを取得するにはClassName::class.javaまたはinstance::class.javaを使う
val clazz = Activity::class.java
val clazzz = this::class.java