藻のブログ

日記,IT,学問(ジェンダー,人工知能など)について書かれることでしょう。

npm で Optional の TypeScript 実装を公開しました

Java 8 Optional の TypeScript 版を実装し、npm パッケージとして公開しました。

www.npmjs.com

github.com

概要

Optional は、ある型の値を含む場合も含まない場合もあることで、値があるかも知れないしないかも知れないことを表現する型です。Haskell の Maybe に相当します。

解説

従来の Java 7 のような言語では、ある型で型つけされた値が実際には null になる可能性があっても、コンパイラはなんの警告もしなく、実行時に null 参照例外となることがありました。

これを解決して、実行時 null 参照例外を排除する方法として

  1. null になり得る型の null チェックをコンパイラが強制する
  2. 値があるかも知れないしないかも知れないことを表現する型(オプショナル)を用いる

の2つがあります。

筆者が使用したことのある静的型つけ言語では、TypeScript, Kotlin が null チェック強制によるもの,C#(構造体に対してのみ), Java, Haskell がオプショナルによるものでした。(C#, Java では null が排除されたわけではありません。)

null チェック強制による方法は、けっきょく if 文で null チェックを行なわなければならない場合があり、コーディングのめんどくささはあまり変わりません。

いっぽうオプショナルによる方法は、 Java 8 の Optional の例でいえば、クラスが豊富なメソッドを提供しているので、「null になる可能性がある値」に相当する値に対する典型的な操作をたやすく行なえます。

もちろん、C# や Kotlin にも用意されている、値が null のときは代わりにデフォルト値を取得するnull 合体演算子や,null に対するメンバーアクセスではなにごともなく null を返すnull 条件演算子に相当するメソッドも用意されていますが、それ以上のメソッドも用意されています。

TypeScript は null チェックを強制する仕組みがあるので、そのままでも null 参照例外が発生しないプログラミングができますが、より簡潔なコーディングを行ないたいと思い、 Java 8 のオプショナルを移植することにしました。

実装に関して

この Optional 実装では、多態性を有効に用いています。値がある場合のクラスとない場合のクラスを別にすることで、内部実装にすら null を用いることなく、わかりやすい実装を行なうことができました。

github.com

2017-08-27

午前1時前に起きた。(午後起床


Google Chrome拡張機能 WIRED Normalizer が機能しなくなっていたので、修正して再リリースした。

1か月ぶりのプログラミングだ……。と言っても、設定ファイルを変えただけで、コードを書いたわけではないけど……。


オープンソースプロジェクトの日本語化を楽しんだ。

2017-08-25

午前9時過ぎに起きた。


ジャンさんにすすめられて、カードゲーム『ハースストーン』を始めた。

ルールが非常によくできている。日本のメーカーも『シャドウバース』

ほかのプレイヤーと対戦できるのが面白い。


PC デスクを注文した。これで少しは便利になって生産性が上がるといいのだが……。


だいたい

2017-08-24

午前10時過ぎに起きた。


手術を受ける意思を伝えに病院に行く日。

午後1時過ぎ、両親とともに病院に向かった。

医師に手術を受ける意思を伝えた。

看護師から入院の説明があるということで、待ったが、45分ぐらいかかった。

長い。

適当に手続きなどをして、帰った。


きょうの夕食はうなぎということにして、病院の近くにある私のおすすめのうなぎ屋に行って、親1に(4人ぶん)買ってもらった。

午後5時30分ころ、やっと家に着いた。

安くておいしかった。良かった。


夜は『ファイナルファンタジー10』をやった。

難易度が非常に高いミニゲームをクリアできたので良かった。


1か月以上 投稿していなかった 日記の投稿を再開した。

2017-08-22

前日の夜から寝られないまま朝を迎えた。

午前4時からテレビゲームをやった。

午前8時30分ころ、極度に眠くなって来たので寝た。

起きると、午後1時ころだった。

そのあとは


サランさん(韓国人男性)の兵役(2年弱)が終わったという。

筆舌に尽くしがたいほど大変だったようだが、死んだりしなくて良かった。

とは言え、やはり個人的には、ここまで友人を苦しめた国家としての韓国という権力を許せない。(