Magicode logo
Magicode
0
3 min read

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

カサレリア。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

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