npm で Optional の TypeScript 実装を公開しました
Java 8 Optional の TypeScript 版を実装し、npm パッケージとして公開しました。
概要
Optional は、ある型の値を含む場合も含まない場合もあることで、値があるかも知れないしないかも知れないことを表現する型です。Haskell の Maybe に相当します。
解説
従来の Java 7 のような言語では、ある型で型つけされた値が実際には null
になる可能性があっても、コンパイラはなんの警告もしなく、実行時に null 参照例外となることがありました。
これを解決して、実行時 null 参照例外を排除する方法として
null
になり得る型のnull
チェックをコンパイラが強制する- 値があるかも知れないしないかも知れないことを表現する型(オプショナル)を用いる
の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
を用いることなく、わかりやすい実装を行なうことができました。
2017-08-27
午前1時前に起きた。(午後起床)
Google Chrome の拡張機能 WIRED Normalizer が機能しなくなっていたので、修正して再リリースした。
1か月ぶりのプログラミングだ……。と言っても、設定ファイルを変えただけで、コードを書いたわけではないけど……。
オープンソースプロジェクトの日本語化を楽しんだ。
2017-08-26
正午前に起きた。(遅い……。)
家でテレビゲームをやっただけ。(無。)
2017-08-25
午前9時過ぎに起きた。
ジャンさんにすすめられて、カードゲーム『ハースストーン』を始めた。
ルールが非常によくできている。日本のメーカーも『シャドウバース』
ほかのプレイヤーと対戦できるのが面白い。
PC デスクを注文した。これで少しは便利になって生産性が上がるといいのだが……。
だいたい無。
2017-08-24
午前10時過ぎに起きた。
手術を受ける意思を伝えに病院に行く日。
午後1時過ぎ、両親とともに病院に向かった。
医師に手術を受ける意思を伝えた。
看護師から入院の説明があるということで、待ったが、45分ぐらいかかった。
長い。
適当に手続きなどをして、帰った。
きょうの夕食はうなぎということにして、病院の近くにある私のおすすめのうなぎ屋に行って、親1に(4人ぶん)買ってもらった。
午後5時30分ころ、やっと家に着いた。
安くておいしかった。良かった。
夜は『ファイナルファンタジー10』をやった。
難易度が非常に高いミニゲームをクリアできたので良かった。
1か月以上 投稿していなかった 日記の投稿を再開した。
2017-08-23
午前11時過ぎに起きた。
買う PC デスクを決めた。あとは買うだけ……。
いつものようにテレビゲームをやった。(ダメ)
2017-08-22
前日の夜から寝られないまま朝を迎えた。
午前4時からテレビゲームをやった。
午前8時30分ころ、極度に眠くなって来たので寝た。
起きると、午後1時ころだった。
そのあとは無。
サランさん(韓国人男性)の兵役(2年弱)が終わったという。
筆舌に尽くしがたいほど大変だったようだが、死んだりしなくて良かった。
とは言え、やはり個人的には、ここまで友人を苦しめた国家としての韓国という権力を許せない。(政)