看过一些 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
网友评论