Nim教程(I )

本教程介绍Nim编程语言的基础知识,适合已经了解基本程序设计概念的学习者。通过编写简单的问候程序,读者可以学习Nim的基本语法,包括字符串字面量、变量声明、赋值语句等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者: Andreas Rumpf
版本: 0.11.2
原文链接:http://nim-lang.org/docs/tut1.html
翻译:
信阳师范学院 高踪 任真 杨汝生 谢锋 黄式东
信阳职业技术学院 刘晓亚

前言

“Der Mensch ist doch ein Augentier – schöne Dinge wünsch ich mir.”
“人是视觉动物–我渴望美好事物。”

本文是编程语言Nim的教程。本教程假定您熟悉基本的程序设计概念,如变量、类型或非常基本的语句。手册(译注:指《Nim Manual》)中包含有更多的高级语言特性的例子。

第一个程序

我们从修改“Hello world”程序开始本教程:

#注释
echo("请问尊姓大名? ")
var name: string = readLine(stdin)
echo("你好, ", name, "!")

将代码保存为“greetings.nim”文件。现在编译并运行之:

nim compile --run greetings.nim

如果带有-run开关选项,Nim在编译后会自动执行文件。你可以在你的程序的文件名之后加上命令行参数:

nim compile --run greetings.nim  参数1  参数2

通常使用简写的命令和开关项,所以您也可以使用如下命令编译运行之:

nim c -r greetings.nim

编译发行版本使用:

nim c -d:release greetings.nim

在默认情况下,Nim编译器针对你的调试喜好生成大量运行时检查。加上-d:release这些检查被关闭而优化选项被打开。
虽然程序是显而易见的,我还是解释一下语法:当程序启动时不缩进的语句被执行。缩进是Nim的语句分组方式。缩进仅使用空格,制表符不被允许。
字符串字面量被双引号包围。var语句声明一个名叫name字符串型新变量,它具有 readline 过程返回的值。由于编译器知道readLine返回一个字符串,故可省略类型声明(称之为本地类型推断)。所以这样也行:

var name = readLine(stdin)

注意,基本上这是Nim的类型推断的唯一形式:它是简洁性和可读性之间的一个很好的折中。
“hello world”程序包含一些编译器已知的标识符:echo、readLine等等。这些内置过程声明在系统模块中,所有其它模块均隐式导入它们。

词汇(Lexical elements)

让我们更详细地看看Nim的词汇:如同其他编程语言一样,Nim包括(字符串)字面量、标识符、关键字、注释、运算符和其他标点符号。

字符串和字符字面量(String and character literals)

字符串字面值是括在双引号中;字符字面值括在单引号中。特殊字符用\转义:
\n意思是换行,\t是制表符(跳格键)等等。还有原字符串字面值(译注:注意下面的r前缀):

r"C:\program files\nim"

注释

注释是在字符串或字符字面量之外任何地方以#开始的。文档注释以##开始:

# A comment.
var myVariable: int ## a documentation comment

因为文档注释符归属于语法树,所以只能放在输入文件中特定的地方!此特性简化了文档生成器。
你也可使用discard(舍弃)语句结合长字符串字面量创建注释块:

discard """ You can have any Nim code text commented
out inside this with no indentation restrictions.
      yes("May I ask a pointless question?") """

数值

数值字面量的写法和大多数其它语言一样。为了良好的可读性,下划线被允许用作特殊的连接:1_000_000(一百万)。包含点(或‘e’或‘E’)的数是浮点数字面量:1.0e9(十亿)。十六进制字面量前缀0x ,二进制字面量前缀0b而八进制字面量前缀为0o。前导零不能生成八进制数。

var语句

Var语句声明一个新的局部变量或全局变量:

var x, y: int # declares x and y to have the type ``int``

关键字var后使用缩进可以列表整个变量段落:

var
  x, y: int
  # a comment can occur here too
  a, b, c: string

赋值语句

赋值语句赋新值给一个变量或更一般的存储位置:

var x = "abc" # introduces a new variable `x` and assigns a value to it
x = "xyz"     # assigns a new value to `x`

=是赋值运算符。运算符不能被重载、覆盖或禁止,但这在将来的Nim版本中也许有变化。你可以只用一条单独的赋值语句声明多个变量,它们都有相同的值:

var x, y = 3  # assigns 3 to the variables `x` and `y`
echo "x ", x  # outputs "x 3"
echo "y ", y  # outputs "y 3"
x = 42        # changes `x` to 42 without changing `y`
echo "x ", x  # outputs "x 42"
echo "y ", y  # outputs "y 3"

注意,声明多个变量只用一条赋值语句而又调用过程,可能会有意想不到的结果:编译器将展开这些赋值,最终调用过程多次。如果过程的返回结果有关联副作用,你的这些变量也许最后会有不同的值!(译注:可使用 {.noSideEffect.})为了安全只使用常量。

常量

常量是绑定一个值的符号。常量的值是不变的。编译器编译时会对声明为常量的表达式求值:

const x = "abc" # the constant x contains the string "abc"

关键字后缩进可以列出整个常量段:

const
  x = 1
  # a comment can occur here too
  y = 2
  z = y + 5 # computations are possible

let语句(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值