美文网首页程序员
快速开发大型 javascript 项目—reason(上)

快速开发大型 javascript 项目—reason(上)

作者: zidea | 来源:发表于2019-03-05 15:48 被阅读69次

看过一些 reason 的视频教程,Reason 优势就是速度,开发速度。

字符串

let multilineGreeting = "Hello
 world!";

字符串支持多行,

字符串的连接

let greetings = "Hello " ++ "world111!";

Record

  • 更轻量级
  • 默认是不可变类型
  • 字段名称和类型是固定的
  • 高效
type person = {age: int, name: string};
let matthew:person = {
  age:30,
  name:"matthew"
}

注意为什么他是轻量级呢?因为编译 javascript 他编程了数组而不是对象。

var matthew = /* record */[
  /* age */30,
  /* name */"matthew"
];

集合

let myArray = [|"hello", "world", "how are you"|]; 
Js.log(myArray[3])
Invalid_argument,-3,index out of bounds

编译后,发现在编译的 javascript 文件多出了

var Caml_array = require("bs-platform/lib/js/caml_array.js");

Variant

强大的功能,体验一下

type myResponseVariant =
  | Yes
  | No
  | PrettyMuch;

let areYouCrushingIt = No

let message =
  switch (areYouCrushingIt) {
  | No => "No worries. Keep going!"
  | Yes => "Great!"
  | PrettyMuch => "Nice!"
  };

体验一下的确挺强大,感觉自己有点喜欢 ocaml,看吧上面代码无论是看起来还写起来都是那么舒服。做分支语句好舒服呀。

函数

ocaml 应该是天生支持函数式编程,所以函数是重头戏,我们看一看。
函数的声名使用箭头返回一个表达式

let greet = (name) => "Hello " ++ name;

Js.log(greet("matthew"))

如果函数体是多行的呢,就用一个大括号

let greetMore = (name) => {
  let part1 = "Hello";
  part1 ++ " " ++ name
};

我们可以为参数添加标签,在参数前面加上~,这样我们就可以调整顺序

let addCoordinates = (~x, ~y) => {
  /* use x and y here */
};
/* ... */
addCoordinates(~x=5, ~y=6);

curry 化

let add = (x, y) => x + y;
let addFive = add(5);
let eleven = addFive(6);
let twelve = addFive(7);

在 reason 函数是自动可以转换为偏函数,上面代码就是证明,暂时先不深究了。

链式调用

validateAge(getAge(parseData(person)))
person
  ->parseData
  ->getAge
  ->validateAge

相关文章

网友评论

    本文标题:快速开发大型 javascript 项目—reason(上)

    本文链接:https://www.haomeiwen.com/subject/yahouqtx.html