zoukankan      html  css  js  c++  java
  • Nim教程【二】

    第一篇教程1秒内就被管理员从首页踢掉了
    管理员嫌内容太少,没有含金量,这次多写一些。
    这应该是国内第一个关于Nim入门的系列教程
    好,闲话休提,言归正传

    Nim介绍
    Nim代码会编译成C语言的代码,再编译成本地机器码,不依赖于虚拟机, 而且生成的可执行文件比较小,不依赖于其他库,分发起来比较方便

    拥有一个“非追踪式”的垃圾收集器,这就非常适用于类似游戏这样的“弱实时”系统

    让程序员拥有直接操纵内存和访问硬件的权力(手动管理的内存有别于垃圾收集器可收集的内存)

    零开销的迭代器

    Cross-module inlining(这是跨模块代码嵌入吗?不知道怎么翻)

    实现了动态方法绑定,但并没有用到虚拟方法表
    (virtual method table,这是在黑.NET吧)

    编译期评估用户自定义的方法

    无用代码自动消除

    直接在栈上为实例、对象、数组分配空间

    类型推断

    在上一篇教程中,我们的helow world程序中有这么一行代码
    var name: string = readLine(stdin)
    这行代码定义了一个string类型的变量,从控制台输入获取字符串,赋值给这个变量
    还可以写成这样
    var name = readLine(stdin)
    因为,在编译的时候nim知道控制台输入的东西是一个字符串类型的值,所以变量的类型也一定是字符串类型的
    开发人员就不必特意指定这个变量的类型了

    这就是Nim的类型推断,可以提升开发效率,节省很多开发量哦

    转义字符

    在Nim中,与C语言类似,反斜杠()是它的转移符号,比方说 代表换行符, 代表tab制表符,
    如果你不想在你的字符串中大量使用转移字符,比方说,类似路径字符串:C:program files im
    你可以写成这样:
    var path = r"C:program files im"
    这就是传说中的“原始字串”,在原始字串中,反斜杠不会被当作转义符

    大段文本
     

    在开发程序的时候,往往需要写大段文本,比如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
    如果什么条件都没有满足,那么就会进入else分支
    这里的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)

    最后推荐几个老园友的博客给大家
    老赵 T2噬菌体 张逸   
  • 相关阅读:
    脚本 页面截取
    net Email 发送(借助第三方)
    查询表、存储过程、触发器的创建时间和最后修改时间(转)
    ActionScript简介
    mysql 1064 USING BTREE问题
    浅谈SQL SERVER函数count()
    程序员学习能力提升三要素
    构建杀手级应用的 JavaScript 框架、工具和技术
    javascript刷新页面方法大全
    html页<![if IE]>...<![endif]>使用解说
  • 原文地址:https://www.cnblogs.com/liulun/p/4506551.html
Copyright © 2011-2022 走看看