Crystal v0.28.0
2019/04/19
4/17 に Crystal 言語の v0.28.0 がリリースされたので、例のごとく CHANGELOG のザックリ訳を上げました。
翻訳のために PR やその基になった Issue 、ソースコードの変更点なんかを漁っていると、まだまだ勉強になる部分は多いですね。
今回面白かったのが、getter
初期値を遅延評価させる辺りの実装で、getter(a : Int32) { 0 }
のようにブロック付きで getter
が定義された場合、それによって生成されるインスタンス変数 @a
の型は Int32
型ではなく nialble な Int32?
型になるようです。
ゲッタメソッド #a
は @a
の値が nil
だったら初期値を代入して返すので、結果得られる返り値の型は nil
を許容しない Int32
型になり、クラスを外部から使う分には問題はありません。
遅延評価させようとすると、定義時点では値を持たない nil
な瞬間を許容せざるをえないのは理解できますが、クラスの内部処理で一時的に @a
に nil
が代入されてもコンパイルエラーにはならないような気がします。(これを書いてる時点で homebrew に v0.28.0 が来ていないので未検証ですが)
今ひとつ自分的に中身がしっくり来ていない変更点もいくつかあるので、ずれたニュアンスの内容などあれば Twitter や Crystal-JP のSlackチャンネル辺りで指摘していただけると助かります。