kotlin

カスタムコルーチンスコープの作成

kotlin.github.io CoroutineScopeは実装することが出来る。 interface CoroutineScope CoroutineScope概要 launchやasyncといった全てのコルーチンビルダーはCoroutineScopeを拡張し、全ての要素とキャンセルを自動的に伝播するために、そのcoroutineContext…

コルーチン Coroutin

コルーチン 使うにあたって dependencyの追加 https://github.com/Kotlin/kotlinx.coroutines#using-in-your-projects Gradleの場合 dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0' } import App.kt import kotlinx.…

classにつけられるキーワード

classにつけられるキーワード data - 値型もどき sealed - 代数的データ型もどき inner - Outerクラスの呼び出しが可能となる enum - Javaのenum open - Javaのfinalの反対。Kotlinの全てのclassはデフォルトでfinalであるため value - ? data class 自動導…

ラムダ式

関数リテラルの一つ 他には、匿名関数が存在する。 構文 { param1: Type1, ... -> // 本体 式1 式2 } パラメーター宣言部: ->の左側部分 本体: ->以降 返り値: 本体の最後の式の結果, voidの場合は、Unitが返り値となる パラメーターの省略 パラメーターが存…

Coroutineのキャンセルとタイムアウト

kotlinlang.org コルーチンの実行をキャンセル Cancelling coroutine execution import kotlinx.coroutines.* fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // de…

コルーチンの基本

kotlinlang.org コルーチンとは About Coroutines Kotlinの非同期関数。 スレッドと違い、何千個作成してもCPUの負荷を増大させない 最初のコルーチン Coroutineは、CoroutinScope内部で実行し、CoroutineScopeは、実行されたCoroutineが全て完了するまで、…

デリゲート

kotlinlang.org Delegation Kotlinは、特定のインターフェースの処理を指定したインスタンスに自動的に委譲させることができる。 例: Baseインターフェースの処理をBaseImplインスタンスに移譲するDerivedクラス interface Base { print() } class BaseImple…

ログ Log

ログレベル 内容 メソッド Assert 重大エラーメッセージ Log.wtf() Error エラーメッセージ Log.e() Warn 警告メッセージ Log.w() Info 通常メッセージ Log.i() Debug 詳細なメッセージ, 製品版アプリでも出力される Log.d() Verbose 詳細なメッセージ, 製品…

Scope関数

kotlinlang.org Scope functions 標準ライブラリに含まれているスコープ関数。 スコープ関数の目的は、一つのオブジェクトのコンテキストを内含するコードブロックを実行することである。 let run with apply also スコープ関数を使うことで、より正確にリー…

デリゲートプロパティ

kotlinlang.org Delegated propaties Delegated propertyにすることで、プロパティに対して、遅延初期化や値の監視などをかんたんに実装することができる。 デリゲートの指定 var delegatedPropety: Type by Delegate() 型の後ろに、byキーワードを使ってデ…

static変数の宣言

companion object を使用する。 例: シングルトンの生成 class User { lateinit var name: String private set // static変数やメソッドは`companion object`ブロックで宣言する companion object { val instance by lazy { User().apply { name = "jtonic" …

プロパティ

Properties プロパティの宣言 varキーワードは、変更可能。valキーワードは、読み取り専用となる。 class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: …

クラス継承

kotlinlang.org 継承 すべてのKotlinのクラスは、Anyを継承している。 class Example // 暗黙的に Any を継承している Anyは3つのメソッドを持っている。 equals() hashCode() toString() クラスは、デフォルトは、finalであり、継承することができない。 /…

クラス まとめ

kotlinlang.org Classes classキーワードを使ってクラスを宣言する。 class Invoice { /*....*/ } class header: 型パラメーター, プライマリーコンストラクタ,など class body headerもbodyもオプションなので、省略が可能。 class Empty Constructors 以下…

匿名関数

匿名関数 本体の指定は2種類ある 式の代入 ブロックの指定 式の代入 fun(a: Int, b:Int):Int = a + b この場合は、代入を使うことができない // Assignments are not expressions, and only expressions are allowed in this context ints.forEach(fun(v) =…

関数リテラルまとめ

kotlinlang.org 関数リテラル Kotlinは関数リテラルとして以下が用意されている ラムダ式 匿名関数 特徴 関数リテラルは、式として渡されるが、値として振る舞う事ができる 。 以下の例を考える max(strings, { a, b -> a.length < b.length }) 関数maxは、…

レシーバー付き関数リテラル

https://kotlinlang.org/docs/lambdas.html#function-literals-with-receiver 関数リテラル with receiver (レシーバー付き関数リテラル) レシーバー付き関数型: A.(B) -> C 型A(レシーバー)に対して、(B) -> C 型の関数リテラルを埋め込むことができる。 レ…

ラムダ式とクラスによる関数型の実装

ラムダ式の正体は関数型を実装したクラスである。 ラムダ式 val f: (Int) -> (Int) -> Unit = { i: Int -> { j: Int -> println(i + j) } } f(1)(5) // 6 f.invoke(1).invoke(5) // 6 invoke()メソッドを通じて関数をコールすることができる クラスによる関…

末尾再帰関数 tailrec

https://kotlinlang.org/docs/functions.html#tail-recursive-functions 末尾再帰関数の場合は、tailrec キーワードを付けることで、コンパイラが最適化し、高速化する。 val eps = 1E-10 // "good enough", could be 10^-15 tailrec fun findFixPoint(x: Do…