プログラミング、フリーダイビング、ブロックチェーンのブログ

プログラミング道場

私がオススメするプログラミング教材です

私がおすすめするプログラミング教材のまとめ【書籍】

目次1 これからエンジニアになりたい人へ向けた本2 プログラミング言語3 アプリ開発4 サーバー、インフラ、セキュリティなど5 機械学習系6 ゲーム開発7 データベース8 デザイン9 組織作り10 自作シリーズ11 その他12 おまけ これ ...

続きを見る

【Dart入門】Streamの使い方

更新日:

記事の内容


この記事では、DartのStreamの使い方を説明します。

Streamの仕組み

Streamとは、「ある値を入れて」、「ある値を出す」仕組みです。
実際に例を見ていきましょう。
「StreamController」というものを使って、streamをコントロールします。

import 'dart:async';
main() {
final controller = StreamController();
controller.sink.add(1);
controller.sink.add(2);
controller.stream.listen((value){
print(value);
});
}
// 1
// 2

順番が変わっても、動作します。

import 'dart:async';
// この順番でも動作します
main() {
final controller = StreamController();
controller.stream.listen((value) {
print(value);
});
controller.sink.add(1);
controller.sink.add(2);
}
// 1
// 2

import 'dart:async';
main() {
final controller = StreamController();
controller.sink.add(1);
controller.sink.add(2);
controller.stream.listen((value) {
print(value);
});
controller.sink.add(3);
controller.sink.add(4);
}
// 1
// 2
// 3
// 4

int型だけではなく、あらゆる値を出し入れすることができます。

import 'dart:async';
main() {
final controller = StreamController();
controller.sink.add(1);
controller.sink.add(2.0);
controller.sink.add('Hello');
controller.sink.add([10, 20.0, 'World']);
controller.sink.add(null);
controller.stream.listen((value){
print(value);
});
}
// 1
// 2
// Hello
// [10, 20, World]
// null

例外処理

例外処理を行うこともできます。
例外は、「onError」でcatchします。

import 'dart:async';
// 例外処理を行うこともできます。
void addLessThanFive(StreamController controller, int value){
if(value < 5){
controller.sink.add(value);
} else {
controller.sink.addError(StateError('$value is not less than 5'));
}
}
main() {
final controller = StreamController();
addLessThanFive(controller, 1);
addLessThanFive(controller, 2);
addLessThanFive(controller, 3);
addLessThanFive(controller, 4);
addLessThanFive(controller, 5);
controller.stream.listen((value){
print(value);
}, onError: (error){
print(error);
});
}
// 1
// 2
// 3
// 4
// Bad state: 5 is not less than 5

Streamをcloseする

Streamをcloseして、その時に行う処理を書くこともできます。
「onDone」という項目で、closeした時の処理を行います。

import 'dart:async';
void addLessThanFive(StreamController controller, int value){
if(value < 5){
controller.sink.add(value);
} else {
controller.sink.addError(StateError('$value is not less than 5'));
}
}
// Streamをcloseします。
main() {
final controller = StreamController();
addLessThanFive(controller, 1);
addLessThanFive(controller, 2);
addLessThanFive(controller, 3);
addLessThanFive(controller, 4);
addLessThanFive(controller, 5);
controller.close();
controller.stream.listen((value){
print(value);
}, onError: (error){
print(error);
}, onDone: (){
print('controller was closed');
});
}
// 1
// 2
// 3
// 4
// Bad state: 5 is not less than 5
// controller was closed

closeをした後は、「新しい値」を追加することは、できなくなります。

import 'dart:async';
void addLessThanFive(StreamController controller, int value){
if(value < 5){
controller.sink.add(value);
} else {
controller.sink.addError(StateError('$value is not less than 5'));
}
}
main() {
final controller = StreamController();
addLessThanFive(controller, 1);
addLessThanFive(controller, 2);
addLessThanFive(controller, 3);
addLessThanFive(controller, 4);
addLessThanFive(controller, 5);
controller.close();
// closeした後に追加することはできません
addLessThanFive(controller, 6);
controller.stream.listen((value){
print(value);
}, onError: (error){
print(error);
}, onDone: (){
print('controller was closed');
});
}
// Uncaught Error: Bad state: Cannot add event after closing

Dart
【Dart入門】streamとasyncの使い方

streamとasync 例を見ながら、説明していきます。 async関数の中では「await for」を使ってStreamの値を取り出すことができます。 また、「async*」関数の中で「yield」キーワードを使うことで、返り値のStr ...

続きを見る

DartとFlutterをより詳しく勉強したい人には、この記事がオススメです

Dart
FlutterとDartの学習でおすすめの本と動画【2024年最新】

目次1 動画教材2 初心者向け3 中級者向け 動画教材 Flutter & Dart - The Complete Guide [2023 Edition] ▼ 興味がある方は、画像をクリック 英語版ですが、人気のコースです。 Fl ...

続きを見る


SwiftでiOSアプリを開発したい人には、この記事がオススメです

Swiftの学習でおすすめの本と動画【2024年最新】

目次1 動画教材2 初心者向け3 中級者向け 動画教材 【iOS】SwiftUI 超入門 - Swift を基礎から学んで iOS (iPhone) アプリを開発しよう ▼ 興味がある方は、画像をクリック Swift , SwiftUI , ...

続きを見る


KotlinでAndroidアプリを開発したい人には、この記事がオススメです

Kotlinの勉強でおすすめの本と動画【2024年最新】

目次1 動画教材2 初心者向け3 中級者向け 動画教材 はじめての Kotlin【Java 知らなくてOK!丁寧な解説で Android に必要な Kotlin の基本を学習】 ▼ 興味がある方は、画像をクリック 今学ぶべき言語、Kotli ...

続きを見る


Gitをより詳しく勉強したい人には、この記事がオススメです

Gitの学習でおすすめの本と動画【2024年最新】

目次1 動画教材2 漫画?でわかりやすく学ぶ入門書の定番3 初心者向け4 中級者向け5 上級者向け 動画教材 もう怖くないGit!チーム開発で必要なGitを完全マスター ▼ 興味がある方は、画像をクリック Gitの基本コマンド、ブランチやマ ...

続きを見る


ゼロからWebエンジニアになりたい人には、この記事がオススメです

ゼロからWebエンジニアとして就職する方法【何もない自分に積み上げていく】

ちまたには、「エンジニアになるための情報」で溢れかえっています。 ジョージさんが考える「Webエンジニアになる方法」を教えて下さい。 目次1 私が定義するWebエンジニア2 必ずやるべきこと3 推奨されること4 まとめ 私が定義するWebエ ...

続きを見る


独学で実務っぽい経験を積みたい人には、この記事がオススメです

エンジニアが独学で実務経験っぽいことを学ぶ方法

エンジニアとして就職するためには実務経験が大事だと聞いていますが、就職しないことには実務経験を積むことができません。 どうやって、最初の実務経験を積んだらいいでしょうか? 目次1 スクールの理想と現実2 IT業界が抱える矛盾点3 擬似的に実 ...

続きを見る

-Dart, プログラミング

S