Dart Stream의 사용 방법
스트림 とは?
https://dart.dev/tutorials/language/streams
公式サイトにはこう書いてある.
await for
또는 listen()
を使うことで 스트림 を使える 산프루をうごかしてみる
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
await for (final value in stream) {
sum += value;
}
return sum;
}
Future (関数の型?) 와 steam の中身を足し続ける?
関数をmain から実行してみると
void main() async {
sumStream(10)
}
Error: The argument type 'int' can't be assigned to the parameter type 'Stream<int>'.
- 'Stream' is from 'dart:async'.
sumStream(10)
^
Error: Compilation failed.
stream でないと受け付けないと出る.
TS のように형さえつければよいのかと
스트림 + int 型をつけて
それを引数に渡して実行してみる
var: Stream<int> number = 10;
しかし、Stream 型で 変数を定義する ことはできなかった.
StreamController を作ってみる
https://qiita.com/JunichiHashimoto/items/7ca7ec6cd2c9af0714eb
調べると、StreamController を使って変数を作り
その中に 싱크대 で中身を入れて
stream で中身を取り出すらしい.
import 'dart:async';
main() {
final controller = StreamController();
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add("Tidus");
controller.stream.listen((value){
print(value);
});
}
1
2
Tidus
DartPad는 で動作確認ができた.
dart:async (을)를 import 하는 것으로
StreamController は使えるようになって
これは Stream なので、変数なのにdondon追加する ことができて
型は何でも入るらしい.
そして、steam.listen すると入れた順番で出力してくれる.
このように解釈できた.
非同期関数処理をみてみる
https://qiita.com/JunichiHashimoto/items/7ca7ec6cd2c9af0714eb#stream%E3%82%92%E8%BF%94%E3%81%99%E9%96%A2%E6%95%B0%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B
同じ記事で 非同期関数処理の説明をみると
関数に async* をつけると普通の int で取った引数を返り値として Stream に変更できて
無印の async をつけると Stream で受けとった引数を Feature の返り値として扱える
と解釈できる.
まとめ
StreamController を使えばなんでも入る Stream の変数をつくれる.
Stream の変数には 싱크대 で追加できる
Stream の変数に 듣기 を打つと中身を全て吐き出す
非同期で Stream を受け取る Future 関数を async で作ると、普通の int や string の変数を渡しても動かない.
int や string の変数を Stream に変換する Future 関数を async* で作ると int や string で受け取って Stream に変換できる中間파이프の注ぎ口が作れる.
Reference
이 문제에 관하여(Dart Stream의 사용 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/dart-stream-noshi-ifang-o08텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)