変数と定数

変数

Nimの変数宣言は二種類あります。

変数初期化再代入
var不要可能
let必須不可能

varは再代入可能な変数宣言で、何度でも値を入れ替える事ができます。

型は変数名の後ろに:を付け、その後に任意の型を宣言します。

var x: int = 0
x = 1

# this is error !
# let x: int = 0
# x = 1

Nimには型推論があり、型を省くことが出来ます。

var a = "apple"
var b = "banana"
var c = 128

# a and b is string
# c is int

ただし、特定の条件下では明示的に型を指定しなければならない場合もあります。

また、インデントを使うことで一度に複数の変数宣言をすることができます。

var
  a = "apple"
  b = "banana"
  c = 128

これはおまけですが、変数宣言で扱える文字範囲が決まっており、その範囲内であれば変数名にする事ができます。

var マジ卍 = "マジ マンジィィィィィ!!!!!"

定数

2種類の変数の他に、特別な定数シンボルとしてconstがあります。

constはコンパイル時に値が決まっている事が必須で、letと同じように中の値を変更することは出来ません。

例えば悪い例として、以下のようなコードがあります。

const x = readLine(stdin)

readLineは、標準入力から一行読み取る関数です。

このコードでは、ユーザーからの入力をconst xに入れようとしていますが、これはコンパイル後に決まる値です。

なので、このコードはコンパイル出来ません。

コンパイル前に既に値が決まっており、以後変更しない物であればconst、それ以外ではvarletを使いましょう。

let x = readLine(stdin)