Už jste slyšeli, že Facebook vydal nový jazyk? Říkají mu ReasonML. Měl by nás jako front-end vývojáře zajímat? Nestačí nám Flow / Typescript? Jak s ReasonML začít? Všechny tyto otázky se pokusím zodpovědět a na jednoduchém příkladě si ukážeme, jak snadno se dá ReasonML integrovat do stávající React + Redux aplikace a jaké benefity přináší.
10. Compiler Errors
We've found a bug for you!
/workspace/reason/src/Student.re 20:30
19 │ let age = 2;
20 │ let greeting = greet(Student(1));
21 │
22 │ Js.log(greeting);
This has type:
int
But somewhere wanted:
string
You can convert a int to a string with string_of_int.
15. let name = "Reason";
let age = 2;
let greet = () => "Hello World!";
Language Basics
16. Algebraic data types
type name = option(string); /* None | Some(“Reason”) */
type state = { items: array(string), length: number };
type schoolPerson =
| Teacher
| Director
| Student(string);
18. Pattern Matching Exhaustiveness
Warning number 8
/workspace/reason/src/Student.re 7:3-12:3
5 │
6 │ let greet = stranger =>
7 │ switch (stranger) {
8 │ | Teacher => "Hey professor!"
. │ ...
11 │ /* | Student(anyOtherName) => "Hey " ++ anyOtherName ++ "." */
12 │ };
13 │
14 │ print_endline(greet(Teacher));
You forgot to handle a possible value here, for example:
Student ""
19.
20. type userT = option(string);
let userOne = Some("X");
let userTwo = None;
let printPlayerName = player =>
switch (player) {
| Some(name) => "Logged in as " ++ name
| None => "Not logged in"
};
Option type
21. Why Reason then? 🤔
“We want people to be
able to use powerful, well-
typed languages at work,
not just in their free time.”
- Jordan Walke