条件の分岐 – ifとmatch
この記事では、V言語の条件分岐構文を紹介する。
概要
- V言語には
if
とmatch
の二種類の条件分岐がある if
は複雑な条件に使う。値を返す式としての用法もあるmatch
は他言語のswitch
に相当し、単純な条件分岐に使う[^1]
if文
最も基本的な条件分岐である。
フォーマット
if
の条件節に()
は使用しない。
一方、実行節の{}
は必須である。
複数条件を記述する際は、if
、else if
、else
の順番に記述する。
if 条件1 {
操作1
}else if 条件2 {
操作2
}else {
デフォルト操作
}
コード例
以下のケースでは、変数current_year
を条件判定している。
値は2019
なので、current_year > 2020
の条件には当てはまらない。
次のcurrent_year < 2020
の条件には当てはまる。
よってこの条件の時の実行節が実行される。
fn main() {
current_year := 2019
if current_year > 2020 {
println('今年は${current_year}年です。東京オリンピックは終わりましたよ。')
}else if current_year < 2020 {
println('今年は${current_year}年です。東京オリンピックはまだですよ。')
}else {
println('今年は${current_year}年です。今年は東京オリンピックですよ。')
}
}
実行結果
if式
if
を式として用いることもできる。
フォーマット
if
式全体を()
で囲むべきである[^2]。
定数または変数の名前 := (
if 条件1 {
値1
}else if{
値2
}else{
デフォルトの値
}
)
コード例
以下のコードでは、定数company_name
の値が'SAK'
なら、
真偽値型の定数company_name_is_sak
にtrue
を、
そうでなければ同定数にfalse
を代入している[^3]。
最後に、文字列上で同変数を展開して表示している[^4]。
// # ifを式として用いている例
fn main() {
// ## 条件判定に用いる定数の定義
company_name := 'SAK'
// ## if式による定数定義
company_name_is_sak := (
if company_name == 'SAK'{
true
}else{
false
}
)
// ## 結果表示
// 真偽値型は文字列表現時にはtrueが1、falseが0として変換される
println('company_name_is_sak : ${company_name_is_sak}')
}
実行結果
match文
matchは式として値を返すことはできない。
定数・変数の値が、想定される値のどれかと同一になるか、という
単純な条件分岐を扱う。
フォーマット
match
の後に、判定対象になる値や定数・変数を書き込む。
マッチする値 => 操作
が基本である。
一つのマッチする値について、二つ以上の操作を行う場合{}
で囲う。
match 対象となる定数や変数 {
'マッチする値1' => 操作1
'マッチする値2' => {
操作2-1
操作2-2
}
else => デフォルト操作
}
コード例
以下のコードでは、定数language_name
の値は'V'
なので、
println('V1')
と、println('V2')
が実行される。
// # match構文
fn main() {
// ## 対象となる定数や変数を定義
language_name := 'V'
// ## マッチブロック
match language_name {
// 1. 1文の命令ならば => の直後に書く
'C' => println('C')
// 2. 2文以上の命令ならば{}で囲む
'V' => {
println('V1')
println('V2')
}
// 3. どのケースにも当てはまらない場合はelse => 実行節
else => println('None')
}
}
実行結果
脚注
- [^1] : バージョン0.1.15まではswitch文だったが、0.1.16からmatch文となった。
- [^2] : 一つの値を返すためのコードのまとまりを明確に示すため
- [^3] : V言語の定数・変数名には大文字は使えない
- [^4] : 真偽値は文字列表現にしたとき、
true
が1
で、false
が0
に自動で変換される
参照