Reason atinge a versão 3 e introduz nova sintaxe e muitas correções, se tornando a tentativa do Facebook de trazer segurança e velocidade da OCaml para desenvolvedores de JavaScript,
Uma das mudanças mais visíveis na sintaxe do Reason é o uso da sintaxe de aplicação/abstração JavaScript em vez de Ocaml. Isso significa que no Reason 3 você chamaria uma função de dois parâmetros, colocando parênteses em torno deles, como você faz em JavaScript:
myFunction(arg1, arg2) // novo, sintaxe C-like myFunction arg1 arg2 // antigo, sintaxe OCaml-like
Outras mudanças importantes são as seguintes:
- Nova sintaxe para declarar o tipo de um objeto em Javascript, usando {. }, ex.:
type payload = {. // Não precisa chamar o no need to call Js.t aqui "name": string, "age": int };
- Suporte ampliado para type punning com parâmetros marcados e nova sintaxe usando "~" em vez de "::". É assim que você declara e chama uma função com o parâmetro marcados:
let addCoordinates = (~x, ~y) => { /* use x e y aqui */ }; ... addCoordinates(~x=5, ~y=6);
Compara a nova implementação com a antiga:
let addCoordinates x::x y::y => { /* use x e y aqui */ }; ... addCoordinates x::5 y::6;
Além disso, type punning (que, no exemplo acima, permite escrever ~x em vez do mais tedioso ~x como x) pode ser usado junto com tipos de anotações, que não haviam sido suportadas anteriormente:
let add = (~first: int, ~second: int) : int => first + second;
- Concatenação de String agora pode ser feito usando o operador "++" ao invés do "^".
- Lógicas de negação agora será pelo operador "!" ao invés do "not"
Os desenvolvedores que possuem uma base de código Reason existente não devem se preocupar com a extensão das mudanças de sintaxe, que foram principalmente impulsionadas pela idéia de torná-lo mais "natural" para desenvolvedores de JavaScript. Na verdade, o Reason 3 vem com um script de migração que promete facilitar a transição.
Outra nova característica promissora do ecossistema Reason é a disponibilidade de uma API oficial para acesso programático ao Parser Reason, refmt, que já possui várias ferramentas como o Klipse, reason-tools, a documentação no site do Reason, etc.
Reason é a tentativa do Facebook de trazer um sistema de tipos, o sistema tipo OCaml, para o ambiente JavaScript. Ele usa o BuckleScript no seu núcleo e fornece uma sintaxe orientada para os programadores JavaScript, que poderiam achar a sintaxe OCaml um pouco estranha.