Nimの制御構文(if, switch case)

Nimで値の内容により処理を分岐する方法を調べます。
こちらを参考にしました。
Nim Tutorial Part Iを日本語訳してみた(前編)


if



Pythonっぽい記法です。


  1. if [条件式A]:
  2.     # [条件式A]に合致した場合
  3. elif [条件式B]:
  4.     # [条件式B]に合致した場合
  5. else:
  6.     # どれにも該当しなかった場合






  1. let x:string = "a"
  2. if x == "a":
  3. echo "aです"
  4. elif x== "b":
  5. echo "bです"
  6. else:
  7. echo "なんだろう"




$ nim c -r sample.nim
aです



条件式はand,orで複数指定できます。

andの例


  1. let x:string = "a"
  2. let y:string = "c"
  3. if x == "a" and y == "c":
  4. echo "x:a,y:cです"
  5. elif x== "b":
  6. echo "bです"
  7. else:
  8. echo "なんだろう"




$ nim c -r sample.nim
x:a,y:cです



orの例


  1. let x:string = "c"
  2. if x == "a" or x == "c":
  3. echo "aかcです"
  4. elif x== "b":
  5. echo "bです"
  6. else:
  7. echo "なんだろう"




$ nim c -r sample.nim
aかcです





case



いわゆるswith文です。
指定の変数が合致するブロックが実行されます。

他の言語で言う
「swith」が「case」
「case」が「of」
「default」が「else」
となります。

また、ブロックごとにbreakは不要です。


  1. let x:string = "a"
  2. case x
  3. of "a":
  4. echo "aです"
  5. of "b":
  6. echo "bです"
  7. else:
  8. echo "なんだろう"




$ nim c -r sample.nim
aです




ofの後にカンマ区切りで複数の値を指定することができます。


  1. let x:string = "c"
  2. case x
  3. of "a", "c":
  4. echo "aかcです"
  5. of "b":
  6. echo "bです"
  7. else:
  8. echo "なんだろう"




$ nim c -r sample.nim
aかcです




比較対象が数値の場合、of [開始]..[終了]で範囲指定が可能です。


  1. let x:int = 12
  2. case x
  3. of 0..10:
  4. echo "0から10の間です"
  5. of 11..20:
  6. echo "11から20の間です"
  7. else:
  8. echo "なんだろう"




$ nim c -r sample.nim
11から20の間です




比較対象がofで指定した範囲外を取り得る場合、elseがないとエラーになります。


  1. let x:int = 12
  2. case x
  3. of 0..10:
  4. echo "0から10の間です"
  5. of 11..20:
  6. echo "11から20の間です"




$ nim c -r sample.nim
sample.nim(2, 1) Error: not all cases are covered



elseで何も処理を行う必要がない場合、単独のelseのみだとエラーになります。


  1. let x:int = 12
  2. case x
  3. of 0..10:
  4. echo "0から10の間です"
  5. of 11..20:
  6. echo "11から20の間です"
  7. else:




$ nim c -r sample.nim
sample.nim(10, 1) Error: invalid indentation



何も処理がないことを伝えるため「discard」と記載します。


  1. let x:int = 12
  2. case x
  3. of 0..10:
  4. echo "0から10の間です"
  5. of 11..20:
  6. echo "11から20の間です"
  7. else:
  8.     discard


関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ