1. webstack前端栈首页
  2. 经验/观点

52%的开发人员都不知道Reason语言

有没有听说过Reason?别担心,很多开发人员都没有。但阅读本文后,您可能需要查看它。

Reason是由Facebook创建的一种编程语言,于2017年发布,直到今天已经有一个小社区。根据StateofJS的调查,近52%的人没有听说过Reason语言。Facebook表示,它是一个更快,更简单的JavaScript。Facebook需要一种新语言,但除此之外,不想创建一种全新的语言,即他们不想从头开始创建所有内容。他们希望在现有语言的基础上构建它,这样程序员就不需要学习全新的语法和语义。这导致了Reason的诞生,在OCaml之上占80%。OCaml是一种已经存在了22年的语言。虽然OCaml有一个小社区,主要用于学术界,但OCaml使Reason如此出色的原因。

Reason的编译目标是JavaScript,因此它在JavaScript中创建了漂亮,可读的编译代码,从而帮助全球各地的大量JavaScript程序员。例如,下面给出的代码是Reason。

let add = (a,b) => a+b; add(13,2);

为何使用原因?

除了从OCaml派生之外,Reason还有两个主要优势:

  • 优秀的类型系统  类型系统是编程语言中的一组规则,您可以告诉编译器变量(或对象等)的类型。例如,  var name = "Harish";
    告诉编译器  name 是string类型的变量。在定义程序的功能和语义时,类型系统也起作用。Reason建立在OCaml语义之上,因此具有出色的类型系统。
  • 实用方法  Reason中使用的数据结构本质上是不可变的。这意味着一旦声明了变量,就无法重新分配或更改其值。使用不可变的变量声明let。这是默认情况下完成的,但是当程序员遇到它时,这会给程序员带来一些麻烦。作为解决方案的一部分,您需要生成另一条记录来覆盖需要更改的值。因此,Reason为我们提供了将变量或对象声明为可变的实用方法,以便它知道无论何时重新赋值,它都完全在语义范围内。以下代码将显示不可变对象。
type record = { age : int, mutable marks: int, } let studentData = {a:23, b:40}; studentData.b = 78; //Changing the value of marks since it is mutable
  • 更好的性能:  Reason的代码输出非常小,构建系统在100ms内完成构建(波动很小)因此,Reason有一些功能可用作JavaScript中的未来方法。

什么是OCaml?

根据  www.ocaml.org,OCaml或Objective Caml的定义,是一种通用编程语言,强调表现力和安全性。让我们来看看它们的表现力是什么意思,以及什么使得OCaml成为今天一个非常活跃的社区的成功语言,即使在22年之后。

OCaml在编程中使用功能范例,这基本上意味着函数是程序的构建块。在定义函数时,OCaml非常强大。永远记住,我们的完整代码和程序的质量总是在功能范例中更好。

let add(a,b,c,d) = a+b+c+d; add(2,3,4,5);

OCaml中的类型安全性是最引人注目的功能之一。在今天的许多大型项目中使用,OCaml编译器会在执行代码之前验证代码是否良好。这有什么用?好吧,在编译期间检测到许多运行时错误,如指针或整数错误,或尝试访问不存在的字段。这些类型错误在运行时环境中提交时可能会花费大量时间和精力。在编译时获取并纠正它非常有效。

使用OCaml作为Reason的主干,可以自动合并OCaml的所有功能。OCaml为我们提供了将函数传递给参数的独特功能。如上所述,Reason默认编译JavaScript代码,语法类似于JS并构建,因此很难忽略在Reason中编写应用程序时使用其中一个JS库的事实。这称为与其他编程语言的互操作性。

ReasonReact

当React包含Reason时,ReasonReact就是我们可以称之为的。在谈到这个之前,让我们简要看看React是什么。 

React是一个用于轻松构建交互式用户界面的JavaScript库。React帮助我们开发小型组件并将其添加到其他组件并创建应用程序。React的一些原则与JS的原则不匹配。这些是:

  • React专注于JavaScript中没有使用的不可变性(没有任何外部库)。
  • React也专注于函数式编程,但Javascript没有。
  • React还使用JS使用的动态丢失数据类型系统,因为它是一个JS框架。

ReasonReact是一种使用Reason的功能来构建Reason的用户界面的方法。ReasonReact使用静态强类型系统和功能范例,如前面部分所述。 

Reason Interop JS

互操作性是指两种语言在同一程序中高效,同步地协同工作的能力。开发者对Reason的主要吸引力在于它与JS的相似之处。通过不可操作性,我们可以结合两种语言的力量和优势,生出更强大的东西。您可以将其与HTML和JS如何协同工作联系起来。只需一个  "script"标签就可以将JS呈现为HTML并在一分钟内创建响应式网页。

我们经常在Reason代码中使用JS库。它被认为是理性世界的一部分。由于我们或任何程序员在Reason中使用JS的可能性非常高,因此我们学习如何将JS与Reason互操作更好。

因此,无论何时您要在Reason代码中使用JS代码,都必须使用“raw”关键字。此代码将帮助您。

[%%raw “var age = 23”]; let add = [%raw {| function fun(b){ return a+b; } |}];

观察到代码有一个b 不是JS 的变量而是Reason的变量  ,我们结合了两种语言并使用了Reason interop和JS。

除了互操作之外,还可以使用FFI。FFI或外部函数接口与使用两种语言并使用类似语义的现象相同。语言语义都被用作原始语言,我们可以在一个程序中运行它们。这个术语在Haskell和Python程序员中比较常见。就像我们如何在C ++中使用C语义并仍然运行我们的代码一样。互操作性是一个更广泛的术语,没有特别关注某些东西,但是当我们使用FFI时,它直接指向一种语言与另一种语言一起使用的语义。

在使用Reason和JS时,有一些可用的对象可供您查看。他们之中有一些是:

  • @ bs.new – 用于新实例。
  • @ bs.val – 变量/函数。
  • @ bs.send – obj.method()。
  • @ bs.obj – 创建JS对象。

还有更多。“bs”在这里指的是BuckleScript。

[@bs.val] external setTimeout : (unit => unit, int) => float = “setTimeout”;

上面的代码使用了JS函数,  setTimeout 并将其  @bs.val 与值对应。

我希望你能够很好地掌握Reason和OCaml。关于Reason的所有东西,你可以在官方文档和练习上探索更多。

原创文章,作者:webstack,如若转载,请注明出处:https://www.webstacks.cn/experience/1857.html

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:webstacks@163.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code