no-image

今後Dartに追加される可能性がある機能紹介

Dartのissueから適当にAccepted扱いのものを拾って紹介してみる。Acceptedになっているからと言って必ず実装されるわけでもないし、実装されるにしても遠い将来になる可能性もあるので、あくまで参考程度に。

全般

ソースコード内でnon-ASCIIキャラクターを使用可能にする

多バイト文字ソースコードをサポートししている言語は意外とある。実用性については不明だ。

typedefを関数以外でも使えるようにする

そもそも関数にしか使えない現状がおかしいのだが。

global限定子

この限定子のお世話になるようなソースコードは拝みたくない。

契約による設計(Design by Contract)

Eiffelで採用されているようなDbCのことだろう。

パターンマッチング

ScalaやOCamlにもあるやつだろう。モダンな言語としてはこれぐらいは欲しいところだ。

lazy val

scalaの機能。遅延評価。

readonly修飾子

finalと違い、そのメンバへの代入も禁止する。

Iterableに加えてIteratorもfor-in内で使用可能にする

Object.isNull

null判定がやりやすくなるはずだ。

クラス

Optionクラス

nullをうまいこと扱えるクラス。モダンな言語ならだいたい搭載していると思われる。

クラス内クラス

今のDartはクラス内でクラスを宣言することができない。

proxyクラス

現状でもproxyクラスを作れないことはないが手間がかかる。

クラスをファーストクラスオブジェクトにする

クラスプライベートなメンバ

Dartはライブラリプライベートしかサポートしていない。

型パラメータTをnew可能にする

new T()したいらしい。そんな処理が必要になるのは設計がまずいと思うのだが。

デフォルトのgetter/setterをオーバーライド可能にする

デフォルトのgetter/setterはオーバーライドできないので、privateな変数を用意してからgetter/setterを別に用意するのだが、その手間がなくなる。

numやStringを拡張可能にする

今は禁止されている。

関数(メソッド)

末尾再帰最適化

なぜこれが実装されていないのかは謎だが、とにかく今のDartは末尾再帰最適化をしていないらしい。

メソッドのジェネリクス

メソッドにもジェネリクスを。

const関数

C++のconst関数。オブジェクトの状態を変更しないことを明示する。

非定数デフォルトパラメータ

パラメータのデフォルト値に定数でない値を指定できる。

(params) -> returnType nameでの宣言

場合によっては多少読みやすくなるかもしれない。

関数合成

restパラメータ

JavaScriptにもあるのだからこれぐらいは欲しい。

相互再帰

関数型言語によくある相互再帰。

リテラル

Setリテラル

Setもリテラル表現がほしい、ということらしい。

2進数リテラル

0b1000みたいなやつ。

charコードリテラル

C言語のような文字コード定数。

rangeリテラル

python等で使われている[a … b]という形式のリテラル。

定数関数リテラル

関数リテラルも定数扱いにしたいらしい。

演算子

二項演算子のクロージャ化

シンタックスはまだ決まっていないらしい。

存在演算子

Swiftなどで使われている演算子。変数がnullでない場合だけ後の処理を実行する。nullチェックの手間を省くもの。

デフォルト演算子

a = (b == null) ? c : b

を、例えば??という演算子を導入して、

a = b ?? c

と書けるようにする演算子。

べき乗演算子

pythonで使われている**演算子。

スプレッド演算子

groovyにあるらしい。

parent*.action;


parent.forEach((child) { child?.action; });

と同等になるようだ。

スライス演算子

pythonで使われている。String.substring()のシンタックスシュガー。

複数パラメータを取る[]と[]=

多次元配列の表現などに。