カサレリア。katzenです。
今回は比較処理を紹介しましょう。
V言語は単純です。プリミティブな型の比較はif
しかありません。
すみません。 match
があります。
if
a := 10
b := 10
c := 10
if a == 10 { // aが10だったら
println("a = 10")
} else if a < 10 { // aが10未満だったら
println("a < 10")
} else { // それ以外
println("a > 10")
}
// >>> a = 10
if a == 10 && b == 10 { // a と b が10 だったら
println("a and b = 10")
} else if a == 10 || b == 10 { // a か b が10 だったら
println("a or b = 10")
}
// >>> a and b = 10
if a != c { // aがcと同じでなければ
println("a != c")
} else if a <= c { // aがc以下なら
println("a ≦ c")
}
// >>> a ≦ c
他の言語とほぼ一緒ですね。型が違うものは直接比較出来ません。
※ u8とi64など
系譜が同じものは比較できます。
三項演算
V言語はレジスタに戻り値を置くようでこんな風にかけます。
x := 10
ans := if x % 2 == 0 { "even" } else {"odd"} // % 2は2で割った余り
println(ans)
// "even"
match
Scalaあたりを触っているひとはおなじみでしょうか。
switch
といえばなんとなく伝わりますかね。
上のif
と同じ内容を書く場合、
a := 10
b := 10
c := 10
match true {
a == 10 { println("a = 10")} // aが10だったら
a < 10 { println("a < 10")} // aが10未満だったら
else { println("a > 10")}
}
match true {
a == 10 && b == 10 { println("a and b = 10")} // a と b が10 だったら
a == 10 || b == 10 { println("a or b = 10")} // a か b が10 だったら
else {}
}
match true {
a != c { println("a != c")} // aがcと同じでなければ
a <= c { println("a ≦ c")} // aがc以下なら
else {}
}
この様になります。
match <条件> {
<比較> { ... }
else { ... }
}
というのが基本形になります。
また、三項演算でも書いたとおり、レジスタに戻りがはいるようなので、
x := 10
msg := match x%2 {
0 { "even" }
else {"odd"}
}
println(msg)
// even
というように、戻り値を返せます。
また、,
で区切って複数条件を指定することが出来ます。
q := 3
println(match q {
1,2,3 { "top 3!" }
else { "over" }
})
// >>> top 3!
結構柔軟ですね。
構造体や配列の比較については、使うときに書きたいと思います。