第一篇教程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)
|
最后推薦幾個老園友的博客給大家