Reason是react 團隊的新開發項目,目前大家常用的facebook
messenger的web版就是用reasonml來開發的。reasonml是由OCaml而來,但又和OCaml不同的是,他想要讓語法可以更像Javascript一些。目前是出到Reason 3(2017年10月),語法上有做了一些變動。他們還有ReasonReact,用意就是要讓Reason可以無縫接軌React。因為是Ocaml的語法,如果你沒有學過functional programming,他們也推薦可以看看 Real World OCaml也就是說Reason之於OCaml有點像是Elixir之於Erlang。Reason
的code會先編譯成Ocaml,再透過BucketScript轉成Javascript。
npm install -g bs-platform
bsb -init my-first-app -theme basic-reason
如果你不想裝,你也可以先 線上試試
這是Reason寫的FizzBuzz
/* Based on https://rosettacode.org/wiki/FizzBuzz#OCaml */
let fizzbuzz = (i) =>
switch (i mod 3, i mod 5) {
| (0, 0) => "FizzBuzz"
| (0, _) => "Fizz"
| (_, 0) => "Buzz"
| _ => string_of_int(i)
};
for (i in 1 to 100) {
Js.log(fizzbuzz(i))
};
然後他會轉成OCaml
let fizzbuzz i =
match ((i mod 3), (i mod 5)) with
| (0,0) -> "FizzBuzz"
| (0,_) -> "Fizz"
| (_,0) -> "Buzz"
| _ -> string_of_int i
let _ = for i = 1 to 100 do Js.log (fizzbuzz i) done
最後會變成JS:
因為Reason是從去年才開始的項目,語法上或許還會更動,目前是由OCaml越來越像javascript,但本質還是以OCaml為主,你也可以直接學個OCaml。裡面很多東西都是需要functional programming 的底子,才可以比較容易理解。無論是否有學過OCaml,如果學過Elm之後要再接觸也不難。(至少Elm architecture還有functional programming的底子,就是很好的基礎建設值得投資)