Nim教程【三】


這是國內第一個關於Nim的系列教程
(至少我百度和必應是沒有找到類似的教程)

先說廢話
有人
Golang的編譯器/工具鏈也學互聯網行業跟風拿用戶當測試,簡直一點素質沒有。
Go社區的風氣不是很好,發布半成品成風。
也許有人會說因為Go社區還年輕,但是Node社區也很年輕,雖然很多庫功能很弱,但是完成了的功能都是比較完備的。
我就啥也不說了,免得被炮火波及,哈哈!
(不管怎么說,我昨天跑到go社區的QQ群里去推Nim,至少是沒有被踢掉的,哈哈,而且還有一個人表示對Nim感興趣)
言歸正傳,依然還是介紹Nim的文字打頭

Nim的表現力
Nim的編譯器、標准庫都是用Nim語言實現的
(golang目前應該不是這樣,但他們貌似要計划這樣做)

內置高級數據類型:strings、sets、sequences等等

擁有本地類型接口的現代類型系統:tuples、variants、generics等等

可自定義的操作符:用戶自定義的操作符往往比語言內置的操作符更具有可讀性,比如"$="

可以用宏的方式在編譯期更改抽象語法樹

好,繼續說語法

關鍵字block和作用域
不管我們用for還是用while,都會導致開辟一個新的作用域
while false: 
  var x = "hi" 
echo(x) #這里沒有縮進,已經跳出while循環的作用域,所以這是錯誤的
這里提到的作用域,是內建的作用域,我們可以使用block關鍵字顯示創建一個i額作用域
block myblock: 
  var x = "hi" 
echo(x) #這里沒有縮進,已經跳出myblock作用域,所以這是錯誤的
block關鍵字后面的作用域名稱是可選的
關鍵字break
break可以迫使程序執行跳出當前作用域
像while、for和block關鍵字聲明的作用域,它都能跳出
block myblock:
  echo("entering block")
  while true:
    echo("looping")
    break # 跳出while循環
  echo("現在仍然在myblock作用域中")
注意只是跳出當前的作用域,要想一下子多跳幾層作用域,那么就要聲明block關鍵字了
block myblock2:
  echo("entering block")
  while true:
    echo("looping")
    break myblock2 # 跳出while循環,而且也跳出myblock2作用域
關鍵字continue
continue關鍵字迫使程序馬上執行下一次循環
while true:
  let x = readLine(stdin)
  if x == "": continue
  echo(x)
關鍵字when
關鍵詞when起的作用和if...elif....else很相似
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!")
else:
  echo("unknown operating system")
不同點如下:
  1. when關鍵詞的每個分支所用的表達式,都必須能在編譯期取值
  2. when關鍵詞內的每個分支並不開辟新的作用域
  3. 當第一個分支的條件為true的時候,編譯器會對第一個分支的代碼做詞法分析,編譯器不對其他分支進行分析
當你編寫系統級代碼的時候可以用when關鍵字來代替C語言中的#ifdef
因為上面講到的第三條特性,所以經常會寫when false這樣的代碼,以避免編譯器在編譯期分析的效果(主要是因為很多東西只有在運行期才能確定)
縮進
單條指令,類似這樣的代碼不需要縮進:
if x: x = false
嵌套的判斷,需要縮進
if x:
  if y:
    y = false
  else:
    y = true
多條指令也需要縮進
if x:
  x = false
  y = false
如果判斷條件是一個挺長的表達式,那么也可以用換行縮進來保證可讀性和正確性
(注意,一定要在操作符、括號開始、逗號結束之后再換行縮進)
if thisIsaLongCondition() and
    thisIsAnotherLongCondition(1,
       2, 3, 4):
  x = true
有些地方只允許你使用一個表達式,或者為了保證可讀性,你最好用一個表達式的時候
你可以用括號和分號來解決問題,比如下面的代碼
const fac4 = (var x = 1; for i in 1..4: x *= i; x)

今天就寫到這里,喜歡的朋友請幫我點一下推薦
你們的推薦是我寫下去的最大動力
下一篇就寫到Nim的方法了
 
 
推薦一首歌給大家《 三十歲的女人
超愛民謠,甚至花錢買了把吉他....
 
 
另外,強烈建議博客園開發一個客戶端版的編輯器
在線寫博客實在是太累了
LiveWriter非常不好用
如果博客園沒有人力做這個事情,我可以來做啊, 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM