😂
Flutter/Dartのawaitキーワードに感動した元C言語オジサンがその使い方をまとめてみた
こんにちは、ワニかず@40歳 出戻りエンジニアです。
前職、といっても10年前になりますが、
C言語のCallback関数やThread、Eventなどといった
めんどくさい非同期処理を扱っていると、ときどき、
「この処理だけは、完了待ちしてから動きたいんだよね。。。」
ということがありました。
そんな欲求を満たしてくれるFlutter/Dartのキーワードが
await
キーワードです。
ということで今回は、
Flutter/Dartのawait
キーワードについてまとめてみました。
awaitの意味と働き
-
非同期操作の完了を待つ: awaitは非同期関数(Futureを返す関数)の完了を待ちます。これにより、非同期操作が完了するまでコードの実行を一時停止します。
-
Futureの解決: awaitはFutureオブジェクトの値を取り出します。Futureは非同期操作の結果を表すオブジェクトで、awaitを使うことでその結果を直接扱えるようになります。
-
同期的な書き方: 非同期処理を同期的なコードのように書けるようにします。これにより、コールバック地獄を避け、コードの可読性が向上します。
例えば:
Future<void> fetchUserData() async {
// HTTPリクエストを送信し、レスポンスを待つ
final response = await http.get(Uri.parse('https://api.example.com/user'));
// レスポンスが返ってきたら処理を続行
if (response.statusCode == 200) {
final userData = jsonDecode(response.body);
print('ユーザー名: ${userData['name']}');
}
}
注意点:
- awaitは必ずasyncキーワードが付いた関数内でのみ使用できます
- awaitを使うと、その行で処理が一時停止しますが、UIスレッドはブロックされません(Flutterの場合)
- 複数の非同期処理を並列実行したい場合は、Future.waitなどの他のAPIと組み合わせる必要があります
Discussion