今まで、Nimを使用して何が出来るかを色々検証してきましたが、構文については全く知らない状態だったのでここいらでしっかりと勉強しておくため、Nim公式のチュートリアルを1から検証していきたいと思います。
チュートリアルは英語だが、自分は英語には全く自信がないのでDeepL翻訳を使って頑張って読み解いていきたいと思います。 また、有志の方が作成した日本語訳もあるので、そちらもしっかりと参考にさせて頂きました。
とりあえず作成して、何か新しいことが分かったら随時追記するようにしていこうと思います。
尚、環境構築等についてはここでは説明しません。 こちらをご参照ください。
一番原始的なプログラムになります。
Hello World!!!!
C言語のようにmain関数は無く、関数で括られていないところからプログラムが始まります。
また、C言語のように文末にセミコロン(;)を入力する必要はなく、標準出力は基本echoを用います。
文字列(string)はダブルクオート(")で括って表現される
文字(char)はシングルクオート(')で括って表現される
C言語と同様にバックスラッシュに続けてエスケープ記号を入力出来る。
改行:Hello WORLD!! タブ:Hello WORLD!! ダブルクオート:"Hello WORLD!!" バックスラッシュ:Hello\WORLD!! 特殊文字:Hello&WORLD!! X
エスケープを無効にしたい場合、ダブルクオート(")の手前にrをつける(リテラルの意)
\tHello\nWORLD!!\x26
3連ダブルクオート(""")で括った場合、エスケープ無効に加えて改行も含め文字列扱いになる
Hello\nWORLD!! "あいうえお" かきくけこ
文字の結合は&で結合する
Hello WORLD!!!
数値は通常の表記以外に見やすさのためアンダーバーを入れることが出来る。
123456 123456
指数表現はeまたはEをつけて表現する
12345000.0 12.345
16進数は0x、8進数は0o、2進数は0bを頭に付ける
65535 64 15
数値の後にはシングルクオート(')で型の略名を記載すると数値の型を明示的に指定する事が出来ます。
-1 255 255
1行コメントはシャープ(#)の後に続けて記載します。
シャープ2つ(##)はドキュメンテーションコメントとの事なので、意図せず使用しないように気をつける必要があります。
ドキュメンテーションの記載方法については今後調べます。
複数行コメントはシャープ+鍵括弧(#[~]#)で記載します。
変数を定義するにはvar, let, constのいずれかを用います。
var | 通常はこちらを用います、値の変更可能。 |
let | 値を一度代入したら変更不可になります。 一度設定したら変更されたくない変数を定義する時に使用します。 |
const | コンパイル時に定数値に置き換えられる変数です。 値は定義時にのみ設定可能です。 コンパイル時に判定不能な数式はエラーになります。 |
110 200 300
変数は以下の記載も可能、、また型名は型推論が使用できるので、省略は可能です。
基本的なデータ型については以下の通り
整数型 Integers | int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 | 整数値を表す型
数値は変数の持つバイトサイズを表す
数値無しのバイトサイズはポインタのサイズと同じ(32ビットOSの場合、int = int32)
先頭が"u"のものは符号なしの型で、演算でオーバーフロー、アンダーフローを発生させず、ラップアラウンドする。
(uint8の場合、255+1=0となる)
実行結果
0 |
浮動小数点型 Floats | float float32 float64 | 浮動小数点を表す型 数値は変数の持つバイトサイズを表す 数値無しのバイトサイズは常に64ビット(float = float64) |
文字列型 Strings | string cstring | 文字列を表す型
基本はUTF-8でエンコーディングされています。
cstringはC言語との連携のために用意されていて、string と cstring は相互に変換可能
また、string以外のデータ型について、先頭に $ を付与する事で、string型に変換されます。 実行結果
1234 |
文字型 Characters | char | 1バイトのキャラクターを表す型 |
真偽型 Booleans | bool | 真偽値(ブーリアン)を表す型 true/falseで表現される |
変数の命名規則は少し変わっています。
イカタコ イカタコ 100
※SyntaxHighterが勝手に変換してしまっていますが、🐙は🐙です。