Nimの文法第2回目になります。
今回はブロック系の構文を中心に調べていきます。
If分は以下の感じで書けます。
Nimではブロック系の構文を記述する場合C言語の様に{~}で囲まずにインデントでブロックを表現します。
ブロックはタブでもスペースでも良さげですが、スペース2つで行う事が推奨されているよう。
名前を入力:aho なんだとこの野郎!! 名前を入力:baka こんにちはbaka 名前を入力: 何も入力されていないよ
Case分は以下の通りです
C言語の様に breakを付ける必要は無いが、何も入力されていないとエラーになる。
何も処理したくないケースの場合、discardを付ける
名前を入力:baka なんだとこの野郎!! 名前を入力:tensai こんにちはtensai 名前を入力:tako 名前を入力: 何も入力されていないよ
数値の場合は範囲を指定することが出来る。
数値の場合、取り得る全ての値が網羅されていないとコンパイルエラーになる。
例えば、uint8 の場合、0~255の全てのケースを網羅すればエラーにはならないが、現実的でない事が多いので大概はelseを使用することになると思う
CASE-3
While分は以下のように記載します。
他の言語同様、brakeでループから抜ける、continueでループの先頭に戻ることが出来ます。
1 2 4 5 6 7
こちらも brake continue が使用可能
カウント値を増やしていく場合は countup、減らしていく場合は countdown を用いる。
0 1 2 3 4 3 2 1
countup の方はこんな書き方もできます
最後の値をカウントに含めたくない場合は、こんな感じに書けます。
0 1 2
配列に対して要素を列挙する様な使い方をする場合はこんな感じ
0: a 1: b 2: c
For文ではイテレータを使用することも出来ます。
イテレータについての説明は、今後別途記載します。
ちょっと注意したいのが、カウントに用いられる変数はForループ内のみで有効で、Forの外側で同じ名前の変数が定義されていたとしても別物として扱われるようです。
このあたり他の言語と違って少しクセがあるので注意したいところです。
*0 *1 *2 *3 i = 0
ブロックを定義するだけの構文
blockに名前を付けることが出来る
こちらも brake continue が使用可能だが名前を指定して抜け出したり戻るブロックを指定する事が可能
(通常は一番内側のブロックに対して作用する)
0 0 0 1 0 2 0 3 1 0 1 1 1 2
When文は今までのとはすこし毛色が違って、これは所謂プリプロセッサにあたるもので、コンパイル時に判定されて実行されます。
C言語における#ifdefにあたる構文ですね。
以前に検証したniguiでもこんな記述があったのを思い出したのでサンプルで貼っときます。
今までブロックは改行+インデントで表現してきたが、実は簡単なブロックであれば1行で表現することが出来る。
1です
命令が複数ある場合セミコロン(";")で区切れば続けて表現することが出来る
1です いちおめ
インデントは、先に述べたブロック構文以外でも、見やすさのため、長い文章に改行を入れて折り返す場合にも使うことも出来ます
改行は、少々自由度が低い気がしますが、主に演算子や、カッコ("(")、カンマ(",")の後に入れることができるようです。
x = 1 y = 1
例は極端すぎて逆に見づらいですが、こういうことも出来るよということです
値の代入式にロジックを用いる事も出来る
24
中の数式もインデント出来るかなとも思ったのですが、上手く動かなかったです
今回はここまで。