Nimメモ


コンパイルコマンド

nim c -r ファイル名


Hello World


コード

echo("helo world!")


コンパイル

nim c -r sample.nim


結果

image.png


変数定義

nimは型言語です。

以下の3つの定義方法があります。



  • var


    • 定義後変数の値の書き換えが可能な変数を定義




  • let


    • 初期値のみの代入が可能で、その後は変更が不可能な変数を定義




  • const


    • 初期値のみの代入が可能で、その後は変更が不可能な変数を定義


    • letとの違いは、コードを書いたときに、すでに値が確定しているものしか代入することができない




サンプル


var

# コマンドラインからの文字の入力

var text = readLine(stdin)

# 文字列の連結
text = text & " concatenation string"

# 結果の表示
echo(text)

入力が「hoge」の場合

hoge concatenation stringが出力される。


let

# コマンドラインからの文字の入力

let text = readLine(stdin)

# 表示
echo(text) # ←コマンドラインからの入力文字列が表示される

以下はだめ。

# コマンドラインからの文字の入力

let text = readLine(stdin)

# 文字列の連結
text = text & " concatenation string" # ←コンパイルエラー


const

const pi = 3.141592

echo(pi) # 3.141592

以下はだめ。

const pi = 3.141592

pi = pi + 3 # ←コンパイルエラー

以下もだめ。

# コマンドラインからの文字の入力

const pi = readLine(stdin) # ←コンパイルエラー


コメント

# 単行コメント

#[
複数行コメント
]#


if文

if 条件式:

処理


# コマンドラインからの文字の入力

let text = readLine(stdin)

if text == "hoge":
# 入力文字列が「hoge」の場合
echo("text is hoge")
elif text == "fuga":
# 入力文字列が「fuga」の場合
echo("text is fuga")
else:
# 入力文字列がその他の場合
echo("Sorry I don't know " & text)


loop


for

# 0から100まで表示される

for i in 0..100:
echo(i)


while

var i = 0

while i <= 100:
# 0から100まで表示される
echo(i)
i += 1


カウントアップ、カウントダウン


..

nimには、「..」が使えます。

for i in 0..5:

echo(i) # 0, 1, 2, 3, 4, 5


countup

for i in countup(0, 5):

echo(i) # 0, 1, 2, 3, 4, 5


countdown

for i in countdown(5, 0):

echo(i) # 5, 4, 3, 2, 1, 0


関数

必ず引数の型、戻り値の型を指定しましょう。


引数なし、戻り値なし

proc sample() =

echo("sample function")

sample() # sample function


引数あり、戻り値なし

# proc 関数名(変数名: 型) =

proc sample(text: string) =
echo(text)

sample("test text") # test text


引数なし、戻り値あり

# proc 関数名(): 戻り値の型 =

proc sample(): string =
return "this is sample"

echo(sample())


引数あり、戻り値あり

# proc 関数名(変数名: 型): 戻り値の型 =

proc sample(text: string): string =
return text

echo(sample("hogehoge text")) # hogehoge text


暗黙のreturn

nimには「暗黙のreturn」というものがいます。

その名は「result変数」です。

関数内でresultという変数に値を入れると、returnを書かなくとも関数の末端まで行くと自動でreturnしてくれます。

proc sample(): string =

# returnしなくても、勝手にreturnされる
result = "hoge"

echo(sample())


受け取りの強制

nimでは関数の戻り値がvoid(なし)でない限り、必ず呼び出し元で戻り値を受け取らなければなりません。

proc sample(): string =

return "hoge"

sample() # ← string型の戻り値があるのに受け取っていないので、コンパイルエラー

どうしても戻り値を受け取りたくない場合はdiscardを使います。

proc sample(): string =

return "hoge"

discard sample() # ← OK


private関数、public関数

nimにはオブジェクト指向の概念が、なんというか、希薄というかほぼないと言うか…

なんかそんな感じです。

上の「関数」の項目で書いた関数はすべてprivate関数です。

他のファイルからは呼び出せません。

ではどうすれば呼び出せるか。

「*」をつけます

proc sample*(): string =

return "This is public function"

以上。


参考