😂

Flutter/Dartのawaitキーワードに感動した元C言語オジサンがその使い方をまとめてみた

2025/03/10に公開

こんにちは、ワニかず@40歳 出戻りエンジニアです。

前職、といっても10年前になりますが、
C言語のCallback関数やThread、Eventなどといった
めんどくさい非同期処理を扱っていると、ときどき、

「この処理だけは、完了待ちしてから動きたいんだよね。。。」
ということがありました。

そんな欲求を満たしてくれるFlutter/Dartのキーワードが
awaitキーワードです。

ということで今回は、
Flutter/Dartのawaitキーワードについてまとめてみました。

awaitの意味と働き

  1. 非同期操作の完了を待つ: awaitは非同期関数(Futureを返す関数)の完了を待ちます。これにより、非同期操作が完了するまでコードの実行を一時停止します。

  2. Futureの解決: awaitはFutureオブジェクトの値を取り出します。Futureは非同期操作の結果を表すオブジェクトで、awaitを使うことでその結果を直接扱えるようになります。

  3. 同期的な書き方: 非同期処理を同期的なコードのように書けるようにします。これにより、コールバック地獄を避け、コードの可読性が向上します。

例えば:

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