こんにちは、らこです。
昨日Dart1.8のリリースノートが発表されました。リリースノートでは標準ライブラリの改善のみということになっていますが、Dart1,8に同梱されるDartEditorにenum
が使える機能が試験的に実装されています。残念ながらasync/await
はまだ先のようです。それでは以下、個別の解説です。
dart:collectionに関する変更
SplayTreeSetクラスにtoSetメソッドを追加
SplayTreeSetクラスにtoSetメソッドが追加され、自身のクローンを返すようになっています。あまり馴染みのないクラスかと思いますがが、SplayTreeというのはキーを自動的に二分木にバランシングして二分探索できるようにしてあるデータ構造で、具象クラスはSplayTreeSetとSplayTreeMapがあります。用途としてはそこまで数が多くなく頻繁にアクセスするデータ、すなわちキャッシュ等が適しているかと思われます。
dart:convertに関する変更
JsonUTF8Encoderを追加
JsonUtf8Encoderがdart:convertに追加されました。今までUTF-8にエンコードされたJSONを生成するにはまずオブジェクトをJSON文字列にエンコードし、その後文字列をUTF-8のバイト列にエンコードするという2段階の処理が必要でしたが、このクラスはそれをまとめてやってくれます。
dart:coreに関する変更
RangeErrorの変更とIndexErrorの追加
RangeErrorの2つの名前付きコンストラクタRangeError.value
とRangeError.range
に新しくmessage
パラメータが追加されました。これですべてのコンストラクタでエラーメッセージを変更できるようになりました。また、RangeError.index
コンストラクタが追加されました。このコンストラクタはfactoryコンストラクタになっており、内部ではこれまた新しいクラスであるIndexErrorが返されるようになっています。IndexErrorはインデックスのあるオブジェクトに対する範囲外アクセスに特化したRangeErrorです。
String.fromCharCodesコンストラクタにstartとend引数を追加
String.fromCharCodesは文字コード列からStringオブジェクトを生成するコンストラクタですが、オプショナル引数として文字コード列の読み取り開始・終了インデックスを指定できるようになりました。
dart:ioに関する変更
HttpClient、HttpServerのTLSプロトコルでALPN extensionをサポート
これは標準APIの拡張ではなく内部実装の改善ですが、SPDYなどのTLSプロトコルの選択機構(?)であるAPLN(Application-Layer Protocol Negotiation)をサポートしたようです。
試験的実装
enum
いよいよDartにもenumが実装されますが、現在はDartEditor上で、Tools > Preferences > Experimental にある “Enable Enums Support” を有効にしないと使えません。enumは次のようなコードが書けるようになります。
以上Dart1.8の主な変更点です。enumによってますますJavaらしさが増したような気がします。正式実装され次第詳しい仕様などはまとめようと思います。