Flutter

【Flutter/Dart】非同期処理とは?概念や使い方を徹底解説!

こんにちは、テルプロです!

「非同期処理(Future/Stream)の使い方がわからない」とお悩みではないでしょうか?

テルプロ

本記事ではそんな悩みを解決していきます!

Flutter/Dartの基礎文法一覧

非同期処理とは

  1. ある処理の実行中に、他の処理を実行できるもの
  2. FutureとStreamの2種類がある

非同期処理を理解する上で、押さえておくべきポイントは上記の2点のみです。

では、詳しく解説していきます!

基本的な使い方

簡単解説

今回は「ある処理の実行中に他の処理を実行したい場合」を例に挙げます。

プログラムは基本的に上から順に読み込まれていきます。

基本的にはこれで問題ないのですが、「ネット上から情報を読み取る」などの重い処理がある場合に上から順に読み込まれていては、その処理が終わるまで他の画面が表示されないため、効率が悪くなってしまします。

このような場合に非同期処理は役に立ちます。

非同期処理を用いることで、上から順にプログラムを読み込みながらも、重たい処理などは個別で読み込んでいくという同時並行での読み込みをすることができます。

非同期処理は例のように、ある処理の実行中に他の処理を実行したいときに用います。

FutureとStreamの違い

Dart言語における非同期処理(Future/Stream)の違いは上記の通りです。

では、それぞれ詳しく解説していきます!

Future (単数データの非同期処理)

// task1〜3を出力する
void main() {
  task1();
  task2();
  task3();
}

// task1の内容
void task1() => print("task 1 complete");

// task2の内容(2秒後に出力されるように設定している)
Future<void> task2() async {
  Future<String> future =
      Future.delayed(Duration(seconds: 2), () => "task 2 complete");
  String value = await future;
  print(value);
}

// task3の内容
void task3() => print("task 3 complete");

/*出力結果 
task 1 complete
task 3 complete
task 2 complete
*/

簡単解説

上記の例では、Futureを用いることで単数データの管理をできるようにしています。

本当なら「task1→task2→task3」と出力されるところ、task2とtask3が入れ替わって出力されています。

Futureは、単数データの非同期処理を行うことができます。

以上が、Futureの基本的な使い方です。

Stream(複数データの非同期処理)

import 'dart:async';

// コントローラーを用意
final streamController = StreamController<String>();

void main() {
 // データが追加されるたびに、データを受け取る
  streamController.stream.listen((addData){
    print(addData);
  });

 // データを追加する
  streamController.sink.add("赤そーめん");
  streamController.sink.add("青そーめん");
  streamController.sink.add("黄そーめん");

}

/*出力結果 
赤そーめん
青そーめん
黄そーめん
*/

簡単解説

上記の例では、Streamを用いることで複数のデータを管理できるようにしています。

Streamは流しそーめんをイメージすると分かりやすいと思います。そーめん(データ)が流れてくる度に、そーめん(データ)をキャッチするようなイメージです。

Streamは、複数データの非同期処理を行うことができます。

以上が、Streamの基本的な使い方です。

まとめ

今回は【非同期処理】の概念や使い方を徹底解説しました。

解説の通り非同期処理は、ある処理の実行中に、他の処理を実行したい際に用いるものとなります。Dartの文法をしっかりと押さえて、開発の幅を広げていきましょう!

下記の記事にて、Flutterの効率的な勉強法として具体的な手順を解説しています。

よろしければご参考にどうぞ。

最後までご覧いただきありがとうございました。ではまた!

参考文献
ABOUT ME
テルプロ
東京都在住のアプリエンジニア。大学では、ソフトウェア開発の研究に取り組む。長期のエンジニアインターンシップを経て、実務スキルを磨き、現在はフリーランスエンジニアとしても活動中。メインはモバイルアプリ開発。IT関連の記事監修も行い、技術の共有と普及に励んでいます。 監修実績(レバテックフリーランス
Flutter関連の書籍を出版しました!