BBH
-Biz Branding Hub-
投稿日 : 
2020/10/19
更新日 : 
2020/10/19

【Scala】match文のサンプル

Scalaでのmatch文のサンプルを紹介します。

基本的なパターン

値に応じて結果を分岐させる最も基本のパターンになります。

match基本パターン

def main(arts: Array[String]) : Unit = {
    matchSample(1)  // => =1
    matchSample(2)  // => =2
    matchSample(3)  // => =3
    matchSample(10) // => それ以外
}

def matchSample(n: Int) : Unit = {
    println(
        n match {
            case 1 => "=1"
            case 2 => "=2"
            case 3 => "=3"
            case _ => "それ以外" 
        }
    )
}

「case _ 」は、該当する値が無かった場合の分岐になります。
該当するケースが無く、「case _ 」の記述が無いと MatchError が発生しますので、必ず記述するようにしましょう。

オブジェクトの中身で分岐する

Scalaのmatch構文はオブジェクトの中身の状態によって分岐することも可能です。

match オブジェクトの状態で分岐する

def main(arts: Array[String]) : Unit = {
    matchSample2(List(1, 2, 3))    // => List(1, 2, 3)
    matchSample2(List(1, 2, 5))    // => 3要素のリスト
    matchSample2(List(1, 2, 3, 4)) // => 4要素のリスト
}

def matchSample2(list: List[Int]) : Unit = {
    println(
        list match {
            case List(1, 2, 3) => list
            case List(a, b ,c) => "3要素のリスト"
            case List(a, b ,c, d) => "4要素のリスト"
        }
    )
}

ifを使って複数条件で分岐する

以下のようにmatchとifを合わせることで、複雑な条件分岐を表現することも可能です。

matchとifで複数条件で分岐させる

def main(arts: Array[String]) : Unit = {
    matchSample3(List(1, 2, 3)) // => 3要素のリスト(末尾5以外)
    matchSample3(List(1, 2, 5)) // => 3要素のリスト(末尾5)
}

def matchSample3(list: List[Int]) : Unit = {
    println(
        list match {
            case List(a, b ,c) if c != 5 => "3要素のリスト(末尾5以外)"
            case List(a, b ,c) => "3要素のリスト(末尾5)"
            case _ => "それ以外"
        }
    )
}

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend