電柱商事

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 な瞬間を許容せざるをえないのは理解できますが、クラスの内部処理で一時的に @anil が代入されてもコンパイルエラーにはならないような気がします。(これを書いてる時点で homebrew に v0.28.0 が来ていないので未検証ですが)

今ひとつ自分的に中身がしっくり来ていない変更点もいくつかあるので、ずれたニュアンスの内容などあれば Twitter や Crystal-JP のSlackチャンネル辺りで指摘していただけると助かります。