LoginSignup
55
72

More than 1 year has passed since last update.

Kotlinチートシート

Last updated at Posted at 2018-01-03

最初に

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
55
72
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
72