Dartでの非同期処理(FutureとStream)2014.09.18技術ブログDartでの非同期処理(FutureとStream)Dartには標準ライブラリとしてdart:asyncというものが用意されており、非同期処理に関する機能を利用することができます。今回は、その中でもFutureとStreamというクラスについてご紹介します。FutureFutureクラスは、何らかの非同期処理の結果を1回限りで受け取りたいようなケースで使用します。HTTPアクセスやファイルアクセスなどがそのケースに相当し、実際にDartの標準ライブラリdart:htmlにあるHttpRequestクラスでも使用されています。req.responseを使って何かする});上記の例では、HttpRequestのrequestというstaticなメソッドがFutureのインスタンスを返し、そのFutureのthenというメソッドに関数を渡しています。HTTPリクエストが返ってきた時に、thenで設定した関数が呼ばれます。この例だけですと、ただのListenerのような結果を返す関数を呼ぶだけのものと変わり無いように見えますが、機能はこれだけではなく、エラーハンドリングや、複数の非同期処理を同時もしくはシーケンスに扱う際などで便利な機能もあります。このようなFutureのインスタンスを返すような非同期処理を行う関数を自前で作ることも可能です。StreamStreamクラスはFutureとは違い、複数の結果を継続的に返すような非同期処理で使用します。Streamという名前からわかるように、あるデータを小分けして受け取るような場合で用いられることが想定されていますが、イベントハンドリングでも使用されています。Dartの標準ライブラリdart:htmlのDOMのElementのイベントでも使用されています。キーが押された});上記の例では、ElementのonKeyDownプロパティそのものがStreamとなっています。(厳密には拡張されたElementStreamというものが使用されています)Streamからのイベントを受け取る場合は、Streamのlistenメソッドを使用します。こちらもFutureと同様に、Streamを返してイベントを発行するようなものを自前で作ることも可能です。このように、Dartでは昨今の非同期処理の需要の高まりに応える形で、多機能で効果的な非同期処理のための仕組みを用意してあります。3.0のライセンスに基づき利用させていただきました。indexともに世界をアップグレードできる、そんな日を夢見て。