さっき決めたブログ

[Nim]Nimの文法を勉強 02 (ブロック系構文)

2020年10月18日 7:29 PM0706NimPROGRAMNimNim文法

Nimの文法第2回目になります。
今回はブロック系の構文を中心に調べていきます。

If文

If分は以下の感じで書けます。
Nimではブロック系の構文を記述する場合C言語の様に{~}で囲まずにインデントでブロックを表現します。
ブロックはタブでもスペースでも良さげですが、スペース2つで行う事が推奨されているよう。

実行結果
名前を入力:aho
なんだとこの野郎!!

名前を入力:baka
こんにちはbaka

名前を入力:
何も入力されていないよ

Case文

Case分は以下の通りです
C言語の様に breakを付ける必要は無いが、何も入力されていないとエラーになる。
何も処理したくないケースの場合、discardを付ける

実行結果
名前を入力:baka
なんだとこの野郎!!

名前を入力:tensai
こんにちはtensai

名前を入力:tako

名前を入力:
何も入力されていないよ

数値の場合は範囲を指定することが出来る。
数値の場合、取り得る全ての値が網羅されていないとコンパイルエラーになる。
例えば、uint8 の場合、0~255の全てのケースを網羅すればエラーにはならないが、現実的でない事が多いので大概はelseを使用することになると思う

実行結果
CASE-3

While文

While分は以下のように記載します。
他の言語同様、brakeでループから抜ける、continueでループの先頭に戻ることが出来ます。

実行結果
1
2
4
5
6
7

For文

こちらも 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文

ブロックを定義するだけの構文
blockに名前を付けることが出来る
こちらも brake continue が使用可能だが名前を指定して抜け出したり戻るブロックを指定する事が可能
(通常は一番内側のブロックに対して作用する)

実行結果
0 0
0 1
0 2
0 3
1 0
1 1
1 2

When文

When文は今までのとはすこし毛色が違って、これは所謂プリプロセッサにあたるもので、コンパイル時に判定されて実行されます。
C言語における#ifdefにあたる構文ですね。
以前に検証したniguiでもこんな記述があったのを思い出したのでサンプルで貼っときます。

ブロック系その他諸々

今までブロックは改行+インデントで表現してきたが、実は簡単なブロックであれば1行で表現することが出来る。

実行結果
1です

命令が複数ある場合セミコロン(";")で区切れば続けて表現することが出来る

実行結果
1です
いちおめ

インデントは、先に述べたブロック構文以外でも、見やすさのため、長い文章に改行を入れて折り返す場合にも使うことも出来ます
改行は、少々自由度が低い気がしますが、主に演算子や、カッコ("(")、カンマ(",")の後に入れることができるようです。

実行結果
x = 1 y = 1

例は極端すぎて逆に見づらいですが、こういうことも出来るよということです

値の代入式にロジックを用いる事も出来る

実行結果
24

中の数式もインデント出来るかなとも思ったのですが、上手く動かなかったです

参考にしたサイトなど

Nim Tutorial (Part I)
https://nim-lang.org/docs/tut1.html
Nim Tutorial Part Iを日本語訳してみた(前編)
https://qiita.com/KTakahiro1729/items/f4776f3a072c01f9086b
DeepL翻訳
https://www.deepl.com/ja/translator

今回はここまで。

投稿者プロフィール

KARASU
うーん いろいろ考え中。。。

コメント

コメント取得中...

関連記事

TOPへ