zoukankan      html  css  js  c++  java
  • 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非常不好用
    如果博客园没有人力做这个事情,我可以来做啊, 
     
  • 相关阅读:
    反射/元类/项目的生命周期
    面向对象高级
    面向对象之封装/鸭子类型
    面向对象之继承
    面向对象1
    包/logging模块/hashlib模块/openpyxl模块/深浅拷贝
    python 几行代码实现自动回复功能
    python crypto rsa 加密运用
    pytohn 单下划线与双下划线的区别
    python 线程小练习
  • 原文地址:https://www.cnblogs.com/liulun/p/4507663.html
Copyright © 2011-2022 走看看