「ES5でOptionを作った」らへんに対する感想

いやまぁ、ツイッターでつぶやいて終りの内容なんだけど、きまぐれでブログに書く。

saneyukis.hatenablog.com

この記事と読んでて、その関連で、

saneyukis.hatenablog.com

とか読んでて、思わずツッコミたくなる感があるので、感想を書いておく。

「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が「よくできてるなぁ」という感想を持ったらしいが、むしろ個人的には、かなり微妙だと思ったところである。

むしろ、多値を利用して、成功失敗を表現するのは、なんか個人的にはイケテナイ感じもする。なぜなら、毎回多値のどちらが、成功や失敗を表現するして、どちらかが、成功した時の値になるかなんて、やっぱり書く人に依存するからだ。