Kotlinのsuspend関数とは?非同期処理の基本的な書き方をやさしく解説!
生徒
「Kotlinで非同期処理を書くときに、suspendってよく出てくるんですけど、これって何ですか?」
先生
「suspendは、Kotlinのコルーチンで使う特別な関数につけるキーワードです。関数の動きを一時的に止めて、あとで再開できるようにする仕組みなんですよ。」
生徒
「一時的に止めるって、どういうことなんですか?アプリは止まらないんですか?」
先生
「いい質問ですね。アプリ全体は止まらずに、関数の中の処理だけを一時的に止めて、必要なタイミングで再開するイメージです。これから詳しく説明しますね。」
1. suspend関数とは?Kotlinの非同期処理に必要なキーワード
suspend関数とは、Kotlinで非同期処理を行うために使う特別な関数のことです。suspendというキーワードを関数の前につけることで、「途中で止めたり、あとで再開したりできる関数」になります。
通常の関数は一気に処理を進めますが、suspend関数は「いったん処理を止めて、他の処理を先に動かす」ことができるので、アプリが固まらないというメリットがあります。
2. 日常の例でイメージしよう!
たとえば、ご飯を炊くときに「炊飯ボタンを押してから、できるまで待つ」必要がありますよね。でもその間、何もしないで待っていたら時間がもったいないです。
そこで、「ご飯を炊いている間にサラダを作る」というように、別の作業を同時に進めるのが非同期処理の考え方です。suspend関数は、「炊飯を開始して、できるまで一時停止しておく」ような働きをします。
3. Kotlinのsuspend関数の基本的な書き方
では、実際にsuspendを使って非同期処理を書く方法を見てみましょう。
import kotlinx.coroutines.*
suspend fun fetchData(): String {
delay(1000) // 1秒待機(非同期)
return "データを取得しました"
}
fun main() = runBlocking {
println("取得中...")
val result = fetchData()
println(result)
}
4. 実行結果を見てみよう
取得中...
データを取得しました
このコードでは、fetchDataという関数がsuspend関数として定義されています。中でdelayを使って1秒間待機してから、文字列を返しています。
runBlockingは、main関数の中でsuspend関数を使うために必要な「土台」です。
5. なぜdelayが使えるの?
delayは、Kotlinのコルーチンライブラリに含まれている「非同期で時間を待つ関数」です。アプリを止めずに待てるというのが特徴です。
Thread.sleepのようにアプリ全体を止めるのではなく、コルーチンだけを一時的に止めるので、他の処理はそのまま進められます。
6. suspend関数のポイント
- suspend関数は通常の関数では呼び出せない:コルーチンの中からでないと呼び出せません。
- delayのような「一時停止」系の関数が使える:非同期処理との相性が抜群です。
- 戻り値も普通の関数と同じように扱える:ただし、呼び出しにはコルーチンが必要です。
7. suspend関数を呼び出すときに必要なもの
さきほども登場したrunBlockingは、「コルーチンの実行環境」をつくるために使います。
他にも、launchやasyncといった関数を使って、コルーチンを起動する方法もありますが、ここではrunBlockingだけを使って説明しています。
fun main() = runBlocking {
val message = fetchData()
println(message)
}
このように、suspend関数を呼び出すときには、コルーチンの中から実行する必要があります。
8. suspend関数の中で他のsuspend関数を呼べる?
はい、suspend関数の中では、他のsuspend関数を自由に呼び出すことができます。
これは、処理を分けて書くことでコードを見やすく、わかりやすくするためにとても便利な仕組みです。
suspend fun getUserInfo(): String {
delay(500)
return "ユーザー情報"
}
suspend fun getUserDetail(): String {
val info = getUserInfo()
return "$info の詳細"
}
9. suspend関数は非同期処理のカギ
Kotlinで非同期処理を書くときに避けて通れないのがsuspend関数です。
delayのような「止められる処理」が使えるのもこの関数だけ。アプリを止めずにスムーズに動かすための魔法のキーワードとも言えます。
最初は難しく見えるかもしれませんが、「待てる関数」「止まれる関数」と覚えておくと理解しやすいですよ。