Skip to content
Go back

Kotlinメモ

· Updated:

Kotlinプログラミングについて個人的にまとめたものです。内容には間違いが含まれている場合があります。

文法

ジャンプ

関数

インライン化

クラス

シングルトン

  • classの代わりにobjectを用いてクラスを宣言する
    • インスタンスはクラス名と同じ名前を持つ
    • インスタンスは初回アクセス時にスレッドセーフな方法で生成される

静的メンバ

  • companion objectを用いて内部クラスを宣言する
    • このクラス名は省略できる
  • 定義したメンバは外側のクラス名でアクセスできる
class Foo {
  companion object {
    fun bar() = 42
  }
}

Foo.bar()  // => 42

無名オブジェクト

  • クラスの宣言とインスタンスの生成を式中で行うことができる
  • 宣言したクラスは名前を持たない
open class Foo(val v: Int)

val obj = object : Foo(42) {
  fun bar() = v
}

obj.bar()  // => 42

ラムダ式

https://kotlinlang.org/docs/lambdas.html

  • 戻り値は最後の式の値
    • 型は推論される
  • 引数の型は推論できる
  • 引数が1つならば引数宣言を省略できる
    • その場合はitが暗黙的に宣言される
  • ラムダ式からのリターンを行うにはラベルを付ける必要がある
    • ラベルなしreturnは関数を抜けるときに使われる
val lambda1: (Int) -> Int = { x: Int -> x * x }  // 基本形
val lambda2: (Int) -> Int = { x -> x * x }  // 型を省略
val lambda3: (Int) -> Int = { it * it }  // 引数宣言を省略
val lambda4: (Int) -> Int = label@ { return@label it * it }  // ラベル付きリターン

無名関数

null安全性

  • 通常の変数はnullを代入できない
  • 変数をnullable(nullを代入可能)にしたい場合、型の末尾に?を付ける
  • nullableな変数のメンバにアクセスするには?.を使う
    • その戻り値はnullableになる
    • 変数がnullであった場合、メンバアクセスは行われずにnullが返る
  • nullでないことが文法上明らかな場合、その範囲内では通常の変数として扱われる
  • 変数の末尾に!!をつけると通常の変数として扱われる
    • その変数がnullであった場合、NullPointerExceptionが投げられる
  • 変数がnullのときに値を返したいときは?:を使う
    • 例えばv ?: 42は:
      • vがnullでない場合、vの値が返る
      • vがnullである場合、42が返る

標準ライブラリ

配列を作る

ラムダ式を使う方法

一見するとクラスの特殊な記法のように見えるが、実際はただの関数呼び出し

val squares = List(5) { (it + 1) * (it + 1) }  // => [1, 4, 9, 16, 25]

コルーチン