込み入ったJavaアプリを作って動かすと、大抵発生するよね。nullチェックを入れてたり、規約で縛ったりして対応することになると思います。コンパイル時に見つけることができれば、、、と思ったことない?Option型を上手く使えれば、コンパイル時にnullチェックみたいなことができてしまうんだ。素敵だよね!では、Option型について語ってみます。Optionとは値があるかないかを表す型です。箱って言っても良いかもですね。Optionは更に2種類のサブクラスを持っている。SomeNoneSome値があることを表す型。None値がないことを表す型。Optionを使ってみる淡白に説明してみたので、早速使ってみよう!Optionを取得するMapを作って、getしてみるよ!getメソッドはOptionを返すんだ。Nonegetメソッドに1、3を渡すとSomeが返って、値を持っていることがわかるね。4を渡すと、該当する値は存在しないからNoneが返ってるね。Some(null)どう?予想した通りになったかな?Someが返ってきているから、値が存在するということだね。その値自体がnullってことなんだ。Mapにキーが存在している場合はSomeを返し、Mapにキーが存在しない場合はNoneを返すってことだね。キーに該当する値がnullの場合も、もちろんあるってこと。nullを扱うのが嫌だという場合は、例えば以下を意識してみよう。null制約使うとは言ってもJavaとは切れない関係だから、Javaのライブラリを使ってしまうとどうしてもnullが混入してしまうね。Optionから値を取り出す値があることがわかれば、実際の値を欲しくなるよね?というか取り出さないと意味ないよね。取り出すのは簡単だよ。Optionのgetメソッドを使うだけだ。LucasNoneの場合もやってみよう。scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)かなり悲惨なことになってしまった。なると、SomeかNoneの判定は必須だね。判定が必須になりました。パターンマッチを使うと読みやすいし、強力な機能も使えるんだけど詳しい説明は別の章で。今回は紹介がてらソースコードを載せるね。exist.となりました。コンパイル時のnullチェックみたいなものを説明します。ここまで読んでくれていれば、勘の鋭い人なら気づいているかもしれない。nullチェックとは言いつつNoneチェックであり、パターンマッチで実現できるのです。場合忘れるのは、何かが存在しない場合の方なので。foundこんなの出ちゃいました。これでNone忘れを回避できるようになるね!!ちなみにEclipseで試してみたところ、ソースコードの左に黄色のwarningを出してくれていました。Nullオブジェクトパターンここは蛇足ではあるんだけど。Nullオブジェクトパターンって知っているかな?Option型を知った時、このパターンが頭に浮かんできました。Nullオブジェクトパターンとはあるインタフェースに対して、空実装をした具象クラス。どのメソッドも何も処理をしない。正常系のロジックを通すことが可能となる。ヌルポ撲滅nullチェックの分岐撲滅OptionもNullオブジェクトパターンに近い考え方なのではないかと感じております。みなさま、温かい目で見守ってください。FollowFringe81株式会社Fringeは、最新のテクノロジーとプロフェッショナルによるサービスにより、社会課題に仮説を立てて市場に広げていくことで、数十年という長期的なスパンで価値を生み出し続け、より良い世界を創る集団です。既存の領域に限らず、時流を読み、仮説を生み出し、テクノロジーの力で優れたサービスを生み出し続けます。