2021-05-01から1ヶ月間の記事一覧

ラムダ式

関数リテラルの一つ 他には、匿名関数が存在する。 構文 { 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が全て完了するまで、…

連想エンティティ - 多対多の関係を表すテーブル

ja.wikipedia.org 命名は非公式 多対多の関係を表すための一つのアプローチとして、連想エンティティ(結合テーブル)がある

デリゲート

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は、…

<c-\><c-n> ターミナルでスクロールする

Vim

対策 tnoremap <c-b> <c-\><c-n> stackoverflow.com</c-n></c-\></c-b>

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

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…

gradle run でコンソールから入力を受け付けるようにする

Console application with Java and gradle - Stack Overflow build.gradle.kts (Kotlin syntax) tasks.getByName<JavaExec>("run") { standardInput = System.`in` } もしくは、 build.gradle (Groovy syntax) run { standardInput = System.in }</javaexec>