🐙

【Flutter】入門!Dart基本「Async Programming」

2023/12/02に公開

Async Programming

DartのAsync Programming(非同期プログラミング)は、非同期処理や非同期イベントを扱うためのプログラミング手法を指します。非同期プログラミングは、特にネットワークリクエスト、ファイルアクセス、ユーザー入力などの操作において、アプリケーションのレスポンシブ性を向上させるのに役立ちます。

Dartでは、非同期プログラミングのためのいくつかの機能が提供されています

FutureとPromise

Futureは非同期計算の結果を表すために使用されます。非同期で実行される関数は、Futureを返します。
Futureは将来の値またはエラーを表現し、非同期処理の完了後にコールバックを呼び出すために使用されます。

dart
Future<String> fetchData() async {
  // ネットワークリクエストなどの非同期処理を行う
  await Future.delayed(Duration(seconds: 2));
  return "Data fetched successfully!";
}

void main() {
  print("Start fetching data...");

  fetchData().then((result) {
    print(result);
  });

  print("Fetching data in progress...");
}

async/await

asyncおよびawaitキーワードは非同期関数内での非同期操作をより簡潔に扱うために使用されます。
asyncは関数が非同期であることを示し、awaitは非同期で実行される関数が完了するのを待つために使用されます。

dart
Future<void> fetchData() async {
  // ネットワークリクエストなどの非同期処理を行う
  await Future.delayed(Duration(seconds: 2));
  print("Data fetched successfully!");
}

void main() async {
  print("Start fetching data...");

  await fetchData();

  print("Fetching data completed.");
}

StreamとStreamController

Streamは非同期イベントのストリームを表し、StreamControllerを使用して新しいイベントをストリームに追加できます。
ストリームは一連の非同期イベントを表現し、リスナー(サブスクライバ)がこれらのイベントを受け取ることができます。

dart
import 'dart:async';

void main() {
  // StreamControllerを使用してストリームを作成
  final StreamController<int> controller = StreamController<int>();

  // ストリームにリスナーを追加
  final StreamSubscription<int> subscription = controller.stream.listen(
    (int data) {
      print("Received data: $data");
    },
  );

  // イベントをストリームに追加
  controller.add(1);
  controller.add(2);
  controller.add(3);

  // ストリームを閉じる
  controller.close();
}

これらの機能を使って非同期プログラミングを行うことで、アプリケーションは非同期的な操作を実行しつつも、他の処理をブロックせずにレスポンシブに動作することができます。非同期プログラミングは特にWebやモバイルアプリケーションなど、ユーザーインタラクションに対してスムーズな動作を提供するために重要です。

Discussion