Ccmmutty logo
Commutty IT
3 min read

第8話 V言語の比較演算子

https://cdn.magicode.io/media/notebox/6a84aedd-bf56-4178-97f5-e5555b3d5551.jpeg
カサレリア。katzenです。
前回、V言語で超簡単なゲームを作るで、比較処理という壁にぶつかりました。
今回は比較処理を紹介しましょう。
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!
結構柔軟ですね。
構造体や配列の比較については、使うときに書きたいと思います。
プリミティブな比較が出来るようになりました。これで前回の障壁を破ることが出来ます。
次回「V言語で超簡単なゲームを作る2」見てください!

Discussion

コメントにはログインが必要です。