withContext withContextはコルーチンのディスパッチャを一時的に変更するための関数です。以下はその使用例です。
package com.kotlin.coroutines.example
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
fun main() {
runBlocking(Dispatchers.IO) {
println("メインディスパッチャ: ${coroutineContext[CoroutineDispatcher]}")
launch {
// 別のディスパッチャで実行
val result = withContext(Dispatchers.Default) {
delay(2000)
println("デフォルトディスパッチャ: ${coroutineContext[CoroutineDispatcher]}")
42
}
}
println("メインディスパッチャ: ${coroutineContext[CoroutineDispatcher]}")
}
}
suspend suspendキーワードは非同期処理を表す修飾子です。以下はその使用例です。
package com.kotlin.coroutines.example
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
fun main() {
runBlocking {
launch {
val result = fetchData()
println("取得データ: $result")
}
println("メイン処理")
}
println("プログラム終了")
}
// suspend修飾子付きの非同期関数
suspend fun fetchData(): String {
delay(5000)
return "データ"
}
inline inlineキーワードは関数呼び出しのオーバーヘッドを削減するための最適化です。以下はその使用例です。
package com.kotlin.coroutines.example
fun main() {
val output = processValue(10) { value ->
println("処理中: $value")
}
}
// inline修飾子付きの高階関数
inline fun processValue(input: Int, action: (Int) -> Unit): Int {
println("前処理: $input")
action(input * 2)
return input + 1
}
このコードでは、inlineキーワードはprocessValue関数に適用されています。これはコンパイラが関数本体を呼び出し元に直接コピーし、関数呼び出しのスタックを生成しないことを意味します。この最適化により、関数呼び出しの時間オーバーヘッドを削減し、プログラムのパフォーマンスを向上させます。inlineキーワードは通常、関数がパラメータとして渡される場合に使用され、関数呼び出しによるパフォーマンスの損失を避けるために役立ちます。