Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ReasonML for JavaScript Developers

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

ReasonML for JavaScript Developers

This slide set shows how to leverage various Reason features like tuples, variants, and pattern matching to write expressive, concise, and type-safe code.

Avatar for Marius Schulz

Marius Schulz

February 01, 2018
Tweet

Other Decks in Programming

Transcript

  1. let todos = [ "Buy milk", "Mow the lawn", "Pay

    the bills" ]; let todos' = [ "Learn ReasonML", ...todos ];
  2. let greet = name => { let greeting = "Hello

    " ++ name ++ "!"; Js.log(greeting); };
  3. const number = 42; const sign = number < 0

    ? "negative" : "non-negative";
  4. let number = 42; let sign = number < 0

    ? "negative" : "non-negative";
  5. let number = 42; let sign = if (number <

    0) { "negative" } else { "non-negative" };
  6. let number = 42; let sign = if (number <

    0) { "negative"; } else { "non-negative"; };
  7. let number = 42; let sign = switch number {

    | x when x < 0 => "negative" | x => "non-negative" };
  8. let number = 42; let sign = switch number {

    | x when x < 0 => "negative" | _ => "non-negative" };
  9. let number = 42; let sign = switch number {

    | x when x < 0 => "negative" | x when x > 0 => "positive" | _ => "zero" };
  10. let number = 42; let sign = switch number {

    | x when x < 0 => "negative" | 0 => "zero" | _ => "positive" };
  11. const number = 42; const sign = number < 0

    ? "negative" : number === 0 ? "zero" : "positive";
  12. type dayOfWeek = | Monday | Tuesday | Wednesday |

    Thursday | Friday | Saturday | Sunday;
  13. type dayOfWeek = | Monday | Tuesday | Wednesday |

    Thursday | Friday | Saturday | Sunday; let today = Thursday;
  14. let abbreviateDay = day => switch day { | Monday

    => "Mo" | Tuesday => "Tu" | Wednesday => "We" | Thursday => "Th" | Friday => "Fr" | Saturday => "Sa" | Sunday => "Su" };
  15. let isWeekendDay = day => switch day { | Monday

    | Tuesday | Wednesday | Thursday | Friday => false | Saturday | Sunday => true };
  16. let isWeekendDay = day => switch day { | Monday

    | Tuesday | Wednesday | Thursday | Friday => false | Saturday | Sunday => true };
  17. let partyTime = { day: Saturday, time: Night }; let

    day = partyTime.day; let time = partyTime.time;
  18. let partyTime = { day: Saturday, time: Night }; /*

    Destructuring */ let {day, time} = partyTime;
  19. const parseDay = index => { switch (index) { case

    0: return "Sunday"; case 1: return "Monday"; case 2: return "Tuesday"; case 3: return "Wednesday"; case 4: return "Thursday"; case 5: return "Friday"; case 6: return "Saturday"; default: throw RangeError("..."); } };
  20. const parseDay = index => { switch (index) { case

    0: return "Sunday"; case 1: return "Monday"; case 2: return "Tuesday"; case 3: return "Wednesday"; case 4: return "Thursday"; case 5: return "Friday"; case 6: return "Saturday"; default: return null; } };
  21. let parseDay = index => switch index { | 0

    => Some(Sunday) | 1 => Some(Monday) | 2 => Some(Tuesday) | 3 => Some(Wednesday) | 4 => Some(Thursday) | 5 => Some(Friday) | 6 => Some(Saturday) | _ => None };
  22. let parseDay = index => switch index { | 0

    => Some(Sunday) | 1 => Some(Monday) | 2 => Some(Tuesday) | 3 => Some(Wednesday) | 4 => Some(Thursday) | 5 => Some(Friday) | 6 => Some(Saturday) | _ => None };
  23. let showDayName = index => { let dayName = switch

    (parseDay(index)) { | Some(day) => abbreviateDay(day) | None => "(invalid day)" }; Js.log(dayName); };