■ はじめに
Scala の 部分関数 (PartialFunction) について、学んでいく
目次
【1】部分関数 / PartialFunction 1)サンプル 【2】部分関数の合体 - orElseメソッド 1)サンプル 2)使用上の注意
【1】部分関数 / PartialFunction
* 特定の引数のみ処理する関数 * PartialFunction 自体は、トレイル
1)サンプル
例1
object Hello { private val demoPartialFunction: PartialFunction[String, String] = { case "red" => "AKA" case "blue" => "AO" case _ => "Other" } def main(args: Array[String]): Unit = { println(demoPartialFunction("red")) println(demoPartialFunction("blue")) println(demoPartialFunction("yellow")) } }
例2
object Hello { def main(args: Array[String]): Unit = { val samples = 1 to 10 val isEven: PartialFunction[Int, String] = { case x if x % 2 == 0 => s"${x} is even" } val evenNumbers = samples collect isEven evenNumbers.foreach(println) } } /** 2 is even 4 is even 6 is even 8 is even 10 is even */
【2】部分関数の合体 - orElseメソッド
* orElse メソッドを使って、部分関数の合体することができる
1)サンプル
object Hello { private val demoPartialFunction: PartialFunction[String, String] = { case "red" => "AKA" case "blue" => "AO" } private val demo2PartialFunction: PartialFunction[String, String] = { case "yellow" => "KIRO" case "green" => "MIDORI" case _ => "Other" } def main(args: Array[String]): Unit = { val newDemoPartialFunction = demoPartialFunction orElse demo2PartialFunction println(newDemoPartialFunction("red")) println(newDemoPartialFunction("blue")) println(newDemoPartialFunction("yellow")) println(newDemoPartialFunction("green")) println(newDemoPartialFunction("black")) } }
出力結果
AKA AO KIRO MIDORI Other
2)使用上の注意
* 順番や 「case _」に気を付けて合成しないと 意図しない動きになる可能性がある
ダメな例
def main(args: Array[String]): Unit = { //val newDemoPartialFunction = demoPartialFunction orElse demo2PartialFunction val newDemoPartialFunction = demo2PartialFunction orElse demoPartialFunction /** Other Other KIRO MIDORI Other */
参考文献
https://yuroyoro.hatenablog.com/entry/20100705/1278328898
https://www.membersedge.co.jp/blog/partialfunction_scala/
https://gist.github.com/takezoe/29ebbd5575b6fcdded3b
関連記事
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / コレクション ~
https://dk521123.hatenablog.com/entry/2023/03/13/000345
Scala ~ コレクションで使えるメソッド ~
https://dk521123.hatenablog.com/entry/2023/09/07/223422