Slide 1

Slide 1 text

5IFSFBTPOGPSVTJOHSFBTPO N[Q .-ษڧձ

Slide 2

Slide 2 text

ཁ໿ .PEFSO+BWB4DSJQU❤.-GFBUVSFT Ͱ΋ಋೖ͸େม 0$BNMΛ+BWB4DSJQUͬΆ͘͠Α͏

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Ҿ༻ݩ3*05"3FBDUMJLFVTFSJOUFSGBDFNJDSPMJCSBSZ IUUQNJLFXBSEOFUUBMLSJPUKT

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

class Greeting extends React.Component { render() { return

Hello

; } } 3FBDUWJFXͷߏங

Slide 7

Slide 7 text

3FEVYঢ়ଶ؅ཧ ભҠؔ਺Λఆٛ͠ঢ়ଶΛ؅ཧ͢Δ ͜ͷؔ਺ΛSFEVDFSΛݺͿ state -> action -> state

Slide 8

Slide 8 text

function counter(state = 0, action) { switch (action.type) { case 'INCREMENT': return state + 1 case 'DECREMENT': return state - 1 default: return state } } ྫDPVOUFSSFEVDFS { type: "INCREMENTAL" }

Slide 9

Slide 9 text

function todo(state, action) { switch (action.type) { case 'TOGGLE': if(state.id == action.id) { return {...state , completed: !state.completed } } else { return state } default: return state } } ྫUPEPSFEVDFS { type: 'TOGGLE', id: 42 } { id: 42, name: "create slide", completed: false, ... }

Slide 10

Slide 10 text

SFEVDFSJEJPN UZQF͕Yͷͱ͖ɺZͱ͍͏߲໨Λ࣋ͭ ঢ়ଶΛίϐʔ͠ɺҰ෦͚ͩߋ৽͢Δ ˠόϦΞϯτܕͬΆ͍ ˠϨίʔυܕͬΆ͍

Slide 11

Slide 11 text

.-༝དྷͷػೳͷಋೖ ύλʔϯϚον .BZCFϞφυ ඇಉظϞφυ ੩తܕݕࠪ

Slide 12

Slide 12 text

+ 2016 Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG

Slide 13

Slide 13 text

✨ཧ૝ͷݴޠ✨ όϦΞϯτϨίʔυܕ͕͋Δ ύλʔϯϚον͕͋Δ ੩తܕݕ͕ࠪ͋Δ +BWB4DSJQU͕ੜ੒Ͱ͖Δ

Slide 14

Slide 14 text

JS developer trying to grasp OCaml syntax Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG

Slide 15

Slide 15 text

JavaScript OCaml Flow Reason Adopting features of ML Becoming familiar to JS developers Syntax + tooling A lot of work Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG

Slide 16

Slide 16 text

3FBTPO͕΍ͬͯΔ͜ͱ

Slide 17

Slide 17 text

#VDLMF4DSJQUͱͷ࿈ܞ 0$BNM͔Β+BWB4DSJQUΛੜ੒͢ΔίϯύΠϥ IUUQHJUIVCDPNCMPPNCFSHCVDLMFTDSJQU function fact(n) { if (n !== 0) { return imul(n, fact(n - 1 | 0)); } else { return 1; } } let rec fact = function | 0 -> 1 | n -> n * fact (n - 1) 0$BNM +BWB4DSJQU

Slide 18

Slide 18 text

'use strict'; var Pervasives = require("bs-platform/lib/js/pervasives"); var Http = require("http"); var hostname = "127.0.0.1"; function create_server(http) { var server = http.createServer(function (_, resp) { resp.statusCode = 200; resp.setHeader("Content-Type", "text/plain"); return resp.end("Hello world\n"); }); return server.listen(3000, hostname, function () { console.log("Server running at http://" + (hostname + (":" + (Pervasives.string_of_int(3000) + "/")))); return /* () */0; }); } create_server(Http); IVNBOSFBEBCMFDPEF

Slide 19

Slide 19 text

Ҿ༻ݩ0$BNM+BWBTDSJQU IUUQTHJUIVCDPN#VDLMF4DSJQUCVDLMFTDSJQUCMPCNBTUFSEPDTTMJEFT#VDLMF@NFFUVQNE

Slide 20

Slide 20 text

let greeting = "hello!"; let name = "mzp"; ..... จ๏ม਺ଋറ

Slide 21

Slide 21 text

if (showMenu) { displayMenu (); }; จ๏৚݅෼ذ

Slide 22

Slide 22 text

switch data { | GoodResult theMessage => "Success! " ^ theMessage | BadResult errorCode => "Something's wrong. The error code is: " ^ (string_of_int errorCode) }; จ๏ύλʔϯϚον

Slide 23

Slide 23 text

ύοέʔδϚωʔδϟʔ OQNΛར༻͢Δ PQBN͸࢖Θͳ͍ OQNJOTUBMMCTQMBUGPSNͰ0$BNMͷϏ ϧυ͕࢝·Δ

Slide 24

Slide 24 text

ίʔυิ׬NFSMJO

Slide 25

Slide 25 text

ΤσΟλ֦ு

Slide 26

Slide 26 text

#FUUFS&SSPST Ҿ༻ݩIUUQTHJUIVCDPNSFBTPONM#FUUFS&SSPST

Slide 27

Slide 27 text

SFE Ҿ༻ݩIUUQTHJUIVCDPNSFBTPONMSFE

Slide 28

Slide 28 text

༨ஊ3FBTPOͱ͍͏໊લ ؔ࿈ϓϩμΫτ͕શ෦Ұൠ໊ࢺ
 qPX JOGFS SFBTPO FYBNQMFʹSFBTPOPGMJGF͕͋Δ

Slide 29

Slide 29 text

3FBTPOͷར༻ྫ

Slide 30

Slide 30 text

IUUQTUXJUUFSDPNMPZPMOZTUBUVT 'BDFCPPL.FTTBOHFSͷ͸ 3FBTPOʹஔ͖׵͑ΒΕͯΔ

Slide 31

Slide 31 text

Meanwhile at… Concurrent React Prototype in OCaml @jordwalke Ҿ༻ݩ5IF%BXOPG3FBTPO IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

3FBTPOͷΑ͍໘

Slide 34

Slide 34 text

let redux state = function | `Toggle id -> if state.id = id then { state with complete=not state.complete } else state | _ -> state ύλʔϯϚον࠷ߴ

Slide 35

Slide 35 text

Ϗϧυ଎౓

Slide 36

Slide 36 text

let maybeSay (s: string Js.null) = Js.Null.iter s (fun message -> Js.log message) let maybeSay (s: string Js.undefined) = Js.Undefined.iter s (fun message -> Js.log message) OVMMVOEFpOFE

Slide 37

Slide 37 text

take_if context ~f:(function `DelayedInc -> Some () | _ -> None) >>= (fun () -> call (delay 1000)) >>= (fun () -> put context `Inc) DBMMCBDLIFMM

Slide 38

Slide 38 text

3FBTPOͷͭΒ͍໘

Slide 39

Slide 39 text

Πϯετʔϧ࣌ؒͷ૿Ճ

Slide 40

Slide 40 text

external request : config -> response Js.Promise.t = "get" [@@bs.module "axios"]; external get : string -> config Js.null -> response Js.Promise.t = "get" [@@bs.module "axios"]; external delete: string -> config Js.null -> response Js.Promise.t = "delete" [@@bs.module "axios"]; external head: string -> config Js.null -> response Js.Promise.t = "head" [@@bs.module "axios"]; external post: string -> 'a Js.null -> config Js.null -> response Js.Promise.t = "post" [@@bs.module "axios"]; external put: string -> config Js.null -> response Js.Promise.t = "put" [@@bs.module "axios"]; external patch: string -> config Js.null -> response Js.Promise.t = "patch" [@@bs.module "axios"]; ܕఆ͕ٛେม

Slide 41

Slide 41 text

let expect_array json = switch (Js.Json.reifyType json) { | Js.Json.Array, data -> swtich (Js.Json.reifyType data) { ... } | _ -> failwith "unexpected response type" } +40/͔ΒͷσʔλऔΓग़͠

Slide 42

Slide 42 text

type tree = | Leaf | Node of int * tree * tree (* Leaf --> 0 *) (* Node(a,b,c) --> [a,b,c]*) όϦΞϯτͷϥϯλΠϜදݱ

Slide 43

Slide 43 text

Α͘Θ͔ͬͯͳ͍෦෼

Slide 44

Slide 44 text

WJNͷϋΠϥΠτ ΩʔϫʔυͷϋΠϥΠτ͕ෆ׬શ ????

Slide 45

Slide 45 text

+4$BNM Ҿ༻ݩIUUQTHJUIVCDPNGBDFCPPLFYQFSJNFOUBM+4$BNM

Slide 46

Slide 46 text

FTZ ZBSOͷGPSL μ΢ϯϩʔυͱϏϧυ͕۠ผ͞Ε͍ͯΔ

Slide 47

Slide 47 text

PQBNϒϦοδ

Slide 48

Slide 48 text

ࢀߟจݙ BXFTPNFSFBTPO
 IUUQTHJUIVCDPNWSBNBOBBXFTPNFSFBTPONMCMPCNBTUFS3&"%.&NE %BXOPG3FBTPO
 IUUQTTBOEFSTQJFTHJUIVCJPTMJEFTEBXOPGSFBTPOQEG 3FBTPOHVJEF
 IUUQTSFBTPONMHJUIVCJPHVJEF #VDLMF4DSJQUNBOVBM
 IUUQCVDLMFTDSJQUHJUIVCJPCVDLMFTDSJQU.BOVBMIUNM

Slide 49

Slide 49 text

·ͱΊ +BWB4DSJQUʹ͸.-ͷػೳ͕ඞཁ ಋೖ͸େมͩ͠ɺ0$BNM࢖ͬͨ΄͏͕ ͍͍ ͦͷ··͸ͭΒ͍ͷͰ࢖͍΍ͨ͘͢͠ͷ ͕3FBTPO

Slide 50

Slide 50 text

No content