V言語 条件の分岐 ifとmatch


条件の分岐 – ifとmatch

この記事は以下の記事のリライト版である。
V言語 条件の分岐 ifとswitch
この記事におけるV言語のバージョンは0.1.17である。

この記事では、V言語の条件分岐構文を紹介する。

概要

  1. V言語にはifmatchの二種類の条件分岐がある
  2. ifは複雑な条件に使う。値を返す式としての用法もある
  3. matchは他言語のswitchに相当し、単純な条件分岐に使う[^1]

if文

最も基本的な条件分岐である。

フォーマット

ifの条件節に()は使用しない。
一方、実行節の{}は必須である。
複数条件を記述する際は、ifelse ifelseの順番に記述する。

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_saktrueを、
そうでなければ同定数に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] : 真偽値は文字列表現にしたとき、true1で、false0に自動で変換される

参照

  1. V言語公式リポジトリ
  2. V言語公式ドキュメント
  3. V言語変更履歴

 

  • このエントリーをはてなブックマークに追加

PAGE TOP