「ES5でOptionを作った」らへんに対する感想
いやまぁ、ツイッターでつぶやいて終りの内容なんだけど、きまぐれでブログに書く。
この記事と読んでて、その関連で、
とか読んでて、思わずツッコミたくなる感があるので、感想を書いておく。
「ES5でOptionを作った」に対する感想
Optionは静的型チェックで意味がある。
まず、TypeScriptなら良いのだが、Optionとかのありがたみって、コンパイラでnullチェックしてくれるとか、そういったところにあるんじゃないかなと思う。つまり、Optionによって、失敗だとか、なにもないだとかが、あるかもしれない値を静的にコンパイルして実行しなくても、静的に型エラーとして検出されるとかそういう意味でな。
そもそも、null(なにもない値)と値が同じ型であるのが問題なのだ。例えばSwiftでは、String型にnilを代入しようとするならコンパイルエラーになることによって、値が無い変数をある程度、"type safety"に扱うことができる。
TypeScriptなら利用する意味はあるような気がする。コンパイルで検知できるかもしれない。しかし、"type safety"ではない動的言語として、Optionが必要かっていうと疑問だ。
「ES6のDestructuring assignmentで解決する」に対する感想
そもそもどちらもCommon Lispにある。
これは、ツッコミというか、ただ僕がLisperなので言いたいだけなのだが、
そもそも、Destructuringもmultiple valueも、Common Lispにある。 Common Lispでは、多値も分配束縛も存在する。
;; 分配束縛 (destructuring-bind (x y z) '(1 2 3) (+ x y z)) ;; => 6 ;; 多値を返す関数 (defun ret-mul-value () (values 1 2 3)) ;; 多値を束縛する。 (multiple-value-bind (x y z) (ret-mul-value) (+ x y z)) ;; => 6
そして、わりと、Common Lispではたとえば、gethashなんかの関数では、多値で、成功失敗を表現したりする。
むしろ、イケテナイ気もがする
golangのmultiple valuesが「よくできてるなぁ」という感想を持ったらしいが、むしろ個人的には、かなり微妙だと思ったところである。
むしろ、多値を利用して、成功失敗を表現するのは、なんか個人的にはイケテナイ感じもする。なぜなら、毎回多値のどちらが、成功や失敗を表現するして、どちらかが、成功した時の値になるかなんて、やっぱり書く人に依存するからだ。