Scalaでラムダ with match-case

ScalaにはJavaのswitch文と同じような機能を持つmatch-case文がある。
この条件分岐の記述とラムダ式をミックスして利用することも出来る。

match-case文

Javaのswitch文とは違い、caseの後にbreak;を書く必要はなく、使い方はほぼほぼ同じで

こんな感じになる。
変数numの値に応じて処理を振り分ける。
どれにもマッチしないものを表すときはdefaultではなく”_”を使う。
この実行結果はもちろん”one”と出力されて終わる。

match-caseで値を返す

実はScalaのこのmatch-case文は値を返すこともできる。
そしてその値はラムダ式を返すことも可能である。
先ほどのコードを少し変更して実行をしてみる。

matchの前に変数宣言が行われている。そしてcase式の中身を少し変更した。
これはどういうことかというと、numの値に応じてヒットしたcase式の処理が行われるが、上で書いたようにmatch-case文は値を返すことができる。
なのでマッチしたところのラムダ式を返すように変更した。
引数は受け取らず、文字列を出力するというラムダ式だ。
そのラムダ式をresultという変数で受け取って、最後に呼び出して処理を行っている状態である。
実際に実行してみると

このようになる。

文字列の判定

上の例ではInt型を判定させたが、もちろん文字列でも可能で

このように、変数calcに格納されている演算子の文字列に応じて処理を振り分けることもできる。

calcを”@”に変更して実行してみると

このような結果となる。
ラムダ式を使うことでオブジェクト思考言語のポリモーフィズム的なことがサクッと実現することができる。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする