ReasonML - расширение синтаксиса для языка OCaml, разрабоатнного компанией Facebook. Синтаксис Reason похож на синтаксис языка JavaScript и транспилируется в язык OCaml. Данный язык обладает статической типизацией, но может быть скомпилирован с динамически типизированный JavaScript, используя компилятор BuckleScript. ReasonML хорошо интегрирован с JavaScript и OCaml экосистемой. ReasonML использует уже известный всем способ распространения через NPM/Yarn.
- Строгая типизация
- Поддержка экосистемы NPM
- Возможность комплияции в нативный код
- ReaonReact для написания интерфейсов
Reason поставляется вместе со стандартным компилятором BuckleScript, который транспилирует код на Reason в JavaScript. Для установки BuckleScript необходимо установить либо npm либо yarn и выполнить одну из следующих команд.
yarn global add bs-platform
npm install -g bs-platform
bsb -init my-new-project -theme basic-reason
Для компиляции и запуска проекта:
cd my-new-project
yarn build # or npm run build, for npm
node src/Demo.bs.js
Особенность | Пример | Код на JS |
---|---|---|
Строка | "Hello" |
"Hello" |
Символ | 'x' |
"x" |
Целочисленный тип | 23 , -23 |
23 , -23 |
Тип с плавающей точкой | 23.0 , -23.0 |
23.0 , -23.0 |
Сложение integer | 23 + 1 |
23 + 1 |
Сложение float | 23.0 +. 1.0 |
23.0 + 1.0 |
Деление/умножение integer | 2 / 23 * 1 |
2 / 23 * 1 |
Деление/умножение float | 2.0 /. 23.0 *. 1.0 |
2.0 / 23.0 * 1.0 |
Возведение float в степень | 2.0 ** 3.0 |
Math.pow(3, 4) |
Конкатенация строк | "Hello " ++ "World" |
"Hello " + "World" |
Сравнение | > , < , >= , <= |
> , < , >= , <= |
Булевы операции | ! , && , || |
! , && , || |
Поверхностное и глубокое сравнение | === , == |
=== , == |
Список | [1, 2, 3] |
[1, [2, [3, 0]]] |
Добавление в список | [a1, a2, ...theRest] |
[a1, [a2, theRest]] |
Массив | [|1, 2, 3|] |
[1, 2, 3] |
Словарь | type t = {b: int}; let a = {b: 10} |
var a = {b: 10} |
Многострочный коммент | /* Comment here */ |
Not in output |
Однострочный коммент | // Comment here |
Not in output |
Для задания переменных используется ключевое слово let. Переменные в Reason немутабельны. Но значения переменной можно изменить, если заново определить переменную с таким же именем.
let result1 = 10.;
let result2 = Js.Math.random() +. result1;
let result3 = Js.Math.floor_float(result2);
При создании переменной ее тип определяется по значению, которое было ей присвоено.
let score = 10;
Но типы могут быть также указаны явно следующим образом.
let score: int = 10;