Stream
とFuture
は、非同期プログラミングをサポートするDartの2つの主要な概念です。それぞれ異なる種類の非同期処理に対応しています。flutterについてのチュートリアルは下記に記載しています
初めてのFlutter/Dartマルチプラットフォームアプリ開発チュートリアル
はじめに FlutterはGoogleが開発した、マルチプラットフォームのモバイルアプリ開発のフレームワークです。Flutterを使うと、AndroidとiOSの両方のプラットフォームで同時にアプリを開発することができます。 また、ブラウザ...
Future
Futureは、いずれ完了することが期待される単一の計算結果を表します。Futureは、通常、非同期で実行される操作の結果を待つために使用されます。ファイルの読み込みやネットワークリクエストなどが典型的な例です。
Futureを使用することで、結果が利用可能になるまで処理をブロックすることなく、他のタスクを実行することができます。結果が利用可能になったら、その結果を処理するコールバック関数を登録することができます。Dartではasync
とawait
キーワードを使って、非同期コードを簡単に記述できます。
※javascriptなどでも同様の使い方です
例:
Future<String> fetchData() async {
// 何らかの非同期操作(例: ネットワークリクエスト)
await Future.delayed(Duration(seconds: 2));
return "データ";
}
void main() async {
print("データ取得開始");
// ここのfetchDataが非同期関数
String data = await fetchData();
print("データ: $data");
}
Stream
Streamは、時間の経過とともに複数の値を生成する非同期イベントシーケンスを表します。イベントは、データの断片、エラー、またはシーケンスの終了を表すことができます。
Streamは、継続的なデータフロー(例えば、WebSocket通信やセンサーからのデータストリーム)を処理する際に便利です。Streamを使用すると、イベントが発生するたびにコールバック関数を実行することができます。
例:
Stream<int> countStream(int to) async* {
for (int i = 1; i <= to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() async {
print("カウント開始");
await for (int count in countStream(5)) {
print("カウント: $count");
}
print("カウント終了");
}
要約すると、Future
は単一の値の完了を表し、Stream
は時間の経過とともに複数のイベントを生成するシーケンスを表します。どちらも非同期プログラミングにおいて重要な役割を果たします。