さっき決めたブログ

[Nim]Nimの文法を勉強 01 (変数・定数)

2020年10月18日 5:35 PM0987NimPROGRAMNimNim文法

今まで、Nimを使用して何が出来るかを色々検証してきましたが、構文については全く知らない状態だったのでここいらでしっかりと勉強しておくため、Nim公式のチュートリアルを1から検証していきたいと思います。

チュートリアルは英語だが、自分は英語には全く自信がないのでDeepL翻訳を使って頑張って読み解いていきたいと思います。 また、有志の方が作成した日本語訳もあるので、そちらもしっかりと参考にさせて頂きました。

とりあえず作成して、何か新しいことが分かったら随時追記するようにしていこうと思います。

尚、環境構築等についてはここでは説明しません。 こちらをご参照ください。

Hello World

一番原始的なプログラムになります。

実行結果
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行コメント

1行コメントはシャープ(#)の後に続けて記載します。

シャープ2つ(##)はドキュメンテーションコメントとの事なので、意図せず使用しないように気をつける必要があります。
ドキュメンテーションの記載方法については今後調べます。

複数行コメント

複数行コメントはシャープ+鍵括弧(#[~]#)で記載します。

変数と型

変数の種類

変数を定義するにはvar, let, constのいずれかを用います。

変数の定義
var通常はこちらを用います、値の変更可能。
let値を一度代入したら変更不可になります。 一度設定したら変更されたくない変数を定義する時に使用します。
constコンパイル時に定数値に置き換えられる変数です。 値は定義時にのみ設定可能です。 コンパイル時に判定不能な数式はエラーになります。
実行結果
110
200
300

型推論

変数は以下の記載も可能、、また型名は型推論が使用できるので、省略は可能です。

Nimの基本的なデータ型

基本的なデータ型については以下の通り

基本的なデータ型
整数型
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言語との連携のために用意されていて、stringcstring は相互に変換可能

また、string以外のデータ型について、先頭に $ を付与する事で、string型に変換されます。

実行結果
1234
文字型
Characters
char1バイトのキャラクターを表す型
真偽型
Booleans
bool真偽値(ブーリアン)を表す型 true/falseで表現される

変数の命名規則

変数の命名規則は少し変わっています。

  • 先頭の一文字以外の、大文字・小文字は区別されない。
  • アンダーバーは使用可能だが無視される。
  • UTF-8の文字(絵文字も含む)が使用できる。
実行結果
イカタコ
イカタコ
100

※SyntaxHighterが勝手に変換してしまっていますが、🐙は🐙です。

参考にしたサイトなど

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へ