BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Facebook在Reason 3中对ReasonML的语法做了重大修改

| 作者 Sergio De Simone 关注 6 他的粉丝 ,译者 谢丽 关注 5 他的粉丝 发布于 2017年11月14日. 估计阅读时间: 3 分钟 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

Facebook试图通过Reason将OCaml的安全性和运行速度带给JavaScript开发人员。该语言达到了3.0版本,引入了新的语法,修复了许多Bug。

Reason语法其中一个最显著的变化是使用JavaScript的application/abstraction语法代替了OCaml的语法。这意味着,在Reason 3中,开发人员在调用函数时可以像在JavaScript中那样把两个参数括起来:

myFunction(arg1, arg2) // 类似C语法的新语法
myFunction arg1 arg2   // 类似OCaml语法的旧语法

其他值得注意的变化有:

  • 使用{.}声明JavaScript对象类型的新语法,例如:

    type payload = {.  // no need to call Js.t here
      "name": string,
      "age": int
    };
    
  • 使用标签参数扩展了对类型双关的支持,新语法使用~代替了::。开发人员可以像下面这样声明并调用带有标签参数的函数:

    let addCoordinates = (~x, ~y) => {
      /* 使用 x 和 y */
        };
    ...
    addCoordinates(~x=5, ~y=6);
    

    可以和以前的语法作下比较:

    let addCoordinates x::x y::y => {
    /* 使用 x 和 y */
    };
    ...
    addCoordinates x::5 y::6;
    

    此外,类型双关(如上例所示,允许开发人员使用~x代替更为繁琐的~x as x)应该和类型注解一起使用,这在以前是不支持的:

    let add = (~first: int, ~second: int) : int => first + second;
    
  • 字符串连接现在可以使用++操作符代替^了。

  • 逻辑非使用代替了not

已经有Reason代码库的开发人员不必担心这种程度的语法变化,这主要是为了让JavaScript开发人员感觉更自然。其实,Reason 3提供了迁移脚本,可以确保过渡比较容易。

Reason另一个大有前途的新特性是提供了正式的API,让开发人员可以访问Reason解析器refmt。Klipsereason-tools、Reason文档站点等工具都是基于该解析器的。

Reason是Facebook试图将OCaml可靠的类型系统带到JavaScript开发环境的产物。它以BuckleScript为核心,提供了迎合JavaScript编程人员喜好的语法,因为他们可以会认为OCaml的语法有点不太友好。

查看英文原文: Facebook Overhauls ReasonML Syntax in Reason 3

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT