nim lang チュートリアル ( while , for , scope , block , break,whenstatement)

nim lang チュートリアルの つづき

while statement

while文は普通にある
書き方も目新しくはない

echo "What's your name?"
var name = readLine(stdin)

while name == "":
    echo "Please tell me your name: "
    name = readLine(stdin)

for statement

for文もある

## countup
for i in countup(1,10):
    echo i

## countdown
for i in countdown(10,1):
    echo i

## incでincrement
var i = 1
while i <= 10:
    echo i
    inc(i)

## レンジ指定 昇順
for i in 1..10:
    echo i  # 1 2 3 4 5 6 7 8 9 10

## レンジ指定 降順
for i in 0..<10:
    echo i  # 1 2 3 4 5 6 7 8 9

var str = "some string"
for i in 0..<str.len:
    echo i 

Scope and block statement

block内で宣言したものは、blockの外では使えない
JavaとかJSとかと同じ

block myblock:
    var x
echo x   # Error: undeclared identifier: 'x'

blockステートメントがある。機能としては何もしないが、名前付きのblockスコープが作れる。
whileとかの中で、breakにblockスコープを指定するとそのblockの外に出られる

block myblock1:
    echo "in myblock1"
    while true:
        echo "in while"
        break
    echo "still in myblock1"   ## printing

block myblock2:
    echo "in myblock2"
    while true:
        echo "in while"
        break myblock2
    echo "still in myblock2"    ## not printing

break statement

他の言語のbreakと同じ

continue statement

他の言語のcontinueと同じ

when statement

ifとほとんど同じ機能だが、変数での評価ができない(定数のみ評価)

例えば、下記だとクロスコンパイル時に他のOSの記述はコンパイル後のコードには入らない。
OSごとの最適化なんだろう。きっと。

when system.hostOS == "windows":
  echo "running on Windows!"
elif system.hostOS == "linux":
  echo "running on Linux!"
elif system.hostOS == "macosx":
  echo "running on Mac OS X!"
elif x == "macosx":            # Error: cannot evaluate at compile time: x
  echo "running on Mac OS X!"
else:
  echo "unknown operating system"
このエントリーをはてなブックマークに追加

Leave a Reply

Your email address will not be published. Required fields are marked *