Nim教程【二】

第一篇教程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可以定义局部或者全局变量

var x,y:int

我们还可以用换行的方式,定义一系列的变量

var      x , y : int     i , z :  string

如果要在声明的时候就赋值

那么可以写成这样的形式

var x , y = 3

关键字const

先来看一下示例代码:

const x = 4

const关键字和var关键字类似,也可以换行批量定义

const      x = 4     y = x+5     z = "allen"

1、const定义的变量不能被修改

2、因为编译器会把所有const变量换成他所对应的值,所以变量对应的值是表达式的话,在编译器一定要能对表达式求值才行

关键字let

用let定义的变量,赋值后也不能被修改,但用let定义的变量,可以在运行期赋值

const input = readLine(stdin) # Error: 运行期的值不能赋给const变量 let input = readLine(stdin)   # works:运行期的值可以赋给let定义的变量

关键字 if  elif和else

一定要注意,是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, "!")

关键字 case of和esle

注意,不是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,就是说什么也不做

关键词 while

echo("What's your name? ") var name = readLine(stdin) while name == "":   echo("Please tell me your name: ")   name = readLine(stdin)

关键词for和..

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏博岩Java大讲堂

关于Java泛型"擦除"的一点思考

3185
来自专栏程序猿

Linux sed 命令的使用

首先,就昨晚的发的消息道歉,虽然整蛊大家了,但是我还是挺开心的。 sed是一种流编辑器,配合正则表达式使用,sed处理文件之时,把当前处理的文保存...

39910
来自专栏智能算法

Python学习(一)---- Python基础必备

https://blog.csdn.net/fgf00/article/details/52061971

4954
来自专栏JMCui

MongoDB系列六(聚合).

 一、概念     使用聚合框架可以对集合中的文档进行变换和组合。基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包...

7805
来自专栏编程

Python原创0基础入门一看几张图就学会了

Python最近势头很猛,由于他在人工智能方面的出色表现,已经成为现在热门的编程语音之一,为了大家方便学习,而不是浪费时间去看入门教程,萌掌用图片的方式画出了你...

2198
来自专栏IMWeb前端团队

走进Sass殿堂

最近在学习sass,从sass新手的角度做一个简单的总结,总结的不对的地方期望各位大大们能多多指点,本文是针对sass3.4做的一个总结~ 一、变量篇 1.1 ...

19810
来自专栏orientlu

C 链表 - linux 如何实现

链表是基本数据结构, 一开始学习数据结构时, 我一般这么定义, 对应实现从头或尾插入的处理函数,

1723
来自专栏nnngu

经典Java面试题收集

2、访问修饰符public,private,protected,以及不写(默认)时的区别?

3948
来自专栏飞雪无情的博客

从Java到Golang快速入门

Golang从09年发布,中间经历了多个版本的演进,已经渐渐趋于成熟,并且出现了很多优秀的开源项目,比如我们熟知的docker,etcd,kubernetes等...

1023
来自专栏Python中文社区

Python源码剖析之整数对象

專 欄 ❈ 松直,Python中文社区专栏作者 专栏地址: http://www.zhihu.com/people/songzhili?utm_source...

2548

扫码关注云+社区

领取腾讯云代金券