第一篇教程1秒內就被管理員從首頁踢掉了
管理員嫌內容太少,沒有含金量,這次多寫一些。
這應該是國內第一個關於Nim入門的系列教程
好,閒話休提,言歸正傳
Nim介紹
Nim程式碼會編譯成C語言的程式碼,再編譯成本地機器碼,不依賴於虛擬機器,
而且生成的可執行檔案比較小,不依賴於其他庫,分發起來比較方便
擁有一個“非追蹤式”的垃圾收集器,這就非常適用於類似遊戲這樣的“弱實時”系統
讓程式設計師擁有直接操縱記憶體和訪問硬體的權力(手動管理的記憶體有別於垃圾收集器可收集的記憶體)
零開銷的迭代器
Cross-module inlining(這是跨模組程式碼嵌入嗎?不知道怎麼翻)
實現了動態方法繫結,但並沒有用到虛擬方法表
(virtual method table,這是在黑.NET吧)
編譯期評估使用者自定義的方法
無用程式碼自動消除
直接在棧上為例項、物件、陣列分配空間
|
型別推斷
在上一篇教程中,我們的helow world程式中有這麼一行程式碼
var name: string = readLine(stdin)
|
還可以寫成這樣
var name = readLine(stdin)
|
開發人員就不必特意指定這個變數的型別了
這就是Nim的型別推斷,可以提升開發效率,節省很多開發量哦
轉義字元
在Nim中,與C語言類似,反斜槓(\)是它的轉移符號,比方說\n代表換行符,\t代表tab製表符,
如果你不想在你的字串中大量使用轉移字元,比方說,類似路徑字串:C:\program files\nim
你可以寫成這樣:
var path = r"C:\program files\nim"
|
在開發程式的時候,往往需要寫大段文字,比如HTML的模版
Nim允許開發人員用成對兒的三個分號包住大段文字,文字里的反斜槓也不會被當作轉義符
就像這樣:
var str = """這是我的大段文字
我換了一行
我又換了一行
就算有反斜槓,\,也不會被當作轉義符"""
|
在新的一行上寫註釋,用一個#號開頭就好,程式碼如下:
#這是一行註釋
var name = readLine(stdin)
|
var name = readLine(stdin)
##這是行尾註釋
|
var可以定義區域性或者全域性變數
var x,y:int
|
我們還可以用換行的方式,定義一系列的變數
var
x , y : int
i , z : string
|
如果要在宣告的時候就賦值
那麼可以寫成這樣的形式
var x , y = 3
|
先來看一下示例程式碼:
const x = 4
|
const關鍵字和var關鍵字類似,也可以換行批量定義
const
x = 4
y = x+5
z = "allen"
|
1、const定義的變數不能被修改
2、因為編譯器會把所有const變數換成他所對應的值,所以變數對應的值是表示式的話,在編譯器一定要能對錶達式求值才行
用let定義的變數,賦值後也不能被修改,但用let定義的變數,可以在執行期賦值
const input = readLine(stdin) # Error: 執行期的值不能賦給const變數
let input = readLine(stdin) # works:執行期的值可以賦給let定義的變數
|
一定要注意,是elif,而不是elseif;(少寫一個字母是一個啊)
let name = readLine(stdin)
if name == "":
echo("Poor soul, you lost your name?")
elif name == "name":
echo("Very funny, your name is name.")
else:
echo("Hi, ", name, "!")
|
注意,不是switch和case;而是case和of;
(少寫一個字母是一個啊)
let name = readLine(stdin)
case name
of "":
echo("Poor soul, you lost your name?")
of "name":
echo("Very funny, your name is name.")
of "Dave", "Frank":
echo("Cool name!")
else:
echo("Hi, ", name, "!")
|
from strutils import parseInt
echo("A number please: ")
let n = parseInt(readLine(stdin))
case n
of 0..2, 4..7: echo("The number is in the set: {0, 1, 2, 4, 5, 6, 7}")
of 3, 8: echo("The number is 3 or 8")
else: discard
|
這裡的discard,就是說什麼也不做
echo("What's your name? ")
var name = readLine(stdin)
while name == "":
echo("Please tell me your name: ")
name = readLine(stdin)
|
countup是一個方法,這個方法每次返回一個整形值,在下面這段程式碼中,就返回1到10的值
echo("Counting to ten: ")
for i in countup(1, 10):
echo($i)
|
一定要注意最後面那個冒號
如果你打算讓他返回從10到1,那麼你應該使用countdown(10, 1)
nim語言還提供了..關鍵字來簡化這種寫法
(少寫一個字母是一個啊)
echo("Counting to ten: ")
for i in 1..10:
echo($i)
|
最後推薦幾個老園友的部落格給大家