![見出し画像](https://assets.st-note.com/production/uploads/images/26841721/rectangle_large_type_2_3f0db4a312a2a3500ca75f029436020b.jpeg?width=1200)
[Flutter] asynchronous Operation(非同期処理)について
こんばんは。けんけんけんことげんです。
今日は非同期処理について触れていきたいと思います。
void finalとconstの違い (){
Duration dayAfterTomotrrow = Duration(days: 1);
sleep(dayAfterTomorrow);
}
さて本題に入る前にですが、同期処理と非同期処理の違いみたいなのって、改めて考えると、よくわかんなかったりしませんか?
JSで非同期処理と言ったら、保存処理をページ遷移前に行ってくれる程度にしか理解していませんでしたが、改めてそこからまとめていきたいと思います。
同期処理と、非同期処理
同期処理は、一つ目のタスク=>2つ目のタスク=> 3つ目のタスク
のように、処理を進めてくれます。(Dartのsleepは同期処理です。)
非同期処理は、3つの処理を同時に進めてくれます。
// これは、同期処理
void main() {
print('In case I dont see you');
greetings1();
greetings2();
greetings3();
}
void greetings1() {
print('Good afternoon');
}
void greetings2(){
print('Good evening ');
}
void greetings3() {
print('And Good night');
}
ただ、ここでgreeting()する前に、タメを作りたい。例えば、2秒くらい時間を起きたい場合は、どうなるのか。well
void main() {
print('In case I dont see you');
Duration twosec = Duration(seconds: 2);
Future.delayed(twosec, (){
greetings1();
greetings2();
greetings3();
});
}
void greetings1() {
print('Good afternoon');
}
void greetings2(){
print('Good evening ');
}
void greetings3() {
print('And Good night');
}
こうですね。
ここで、Futureクラスを持ってきてますが、ドキュメントはこちら
Durationはこっち
Futureは、現時点では、まだ起きていないけど、Durationで定義した時間のあとで、実行しますよってクラスだと考えてます。今後、色々試したら、またまとめてみたいと思います。
await, async
例えばgreeting2の結果を3に持っていきたいとなった時、greetingの処理が終わったら、greeting3の処理を行わないといけませんが、Futureは、非同期処理を行うので、このままだと、greeting3が先に表示されますね。
void main() {
print('In case I dont see you');
greetings1();
greetings2();
greetings3();
}
void greetings1() {
print('Good afternoon');
}
void greetings2(){
Duration twosec = Duration(seconds: 2);
Future.delayed(twosec, (){
print('Good evening ');
});
}
void greetings3() {
print('And Good night');
}
これだと、台無しなので、待ってもらうgreeting3にはgreeting2を待ってもらう必要があります。そのためのawaitです。awaitoを使うためには、asyncが必要であり、asyncを使うためには、voidではなく、Futureを使う必要があります。
ここら辺がよくわかっていないので、今後学んでいけたらと思ってますが、結論コードは以下のようになります。
void main() async {
print('In case I dont see you');
greetings1();
String text = await greetings2();
greetings3(text);
}
void greetings1() {
print('Good afternoon');
}
Future greetings2() async{
String greet;
Duration twosec = Duration(seconds: 2);
await Future.delayed(twosec, (){
greet = 'Good evening ';
});
return greet;
}
void greetings3(String greet) {
print('$greet And Good night');
}
所感
実際Futureとか、使い方がいまいちぴんとこなくて手探りな部分はありますが、今後使って、理解していければなと思ってます。
早く自分のアプリを作れるようになりたい...
それではまた..おっと。
print (' in case I don'\t see ya good afternoon, good evening and good night! ')
この記事が気に入ったらサポートをしてみませんか?