taming the beast: functional javascript for sane applicationstaming the beast: functional javascript...

127
Dave Bouwman | Software Engineer | ArcGIS Hub & ArcGIS Enterprise Sites Taming the Beast: Functional Javascript for Sane Applications

Upload: others

Post on 22-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Dave Bouwman | Software Engineer | ArcGIS Hub & ArcGIS Enterprise Sites

Taming the Beast: Functional Javascript for Sane Applications

Page 2: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

About Me

~21+ yrs as a developer15 yrs consultant6 yrs @ ArcGIS Hub

Page 3: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

As a consultant…

Page 4: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

At Esri… shipping products…

Page 5: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Optimize for maintenance and flexibility

Page 6: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Also, complexity is a thing.

Page 7: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Led me to…

Page 8: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

FunctionalProgramming

Led me to…

Page 9: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

StyleProgrammingof

Page 10: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

1930’s Lambda Calculus

Alonzo Church

Page 11: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Combinatory Logic

Haskell CurryAlonzo Church

Page 12: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

System of “computability”

Haskell CurryAlonzo Church

Page 13: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

“math functions”

Haskell CurryAlonzo Church

Page 14: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

“transform values”

Haskell CurryAlonzo Church

Page 15: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

“pure functions”

Haskell CurryAlonzo Church

Page 16: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

RobustMaintainable

Software

Page 17: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Many Languages

Page 18: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Pure Functional

LISPHaskellErlangScalaElm

OCamlML

Page 19: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

FP Capable

JavaC#

Javascript

Page 20: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Why the Interest now?

Why the interest now?

Page 21: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

“wide computers”

Page 22: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

pure functions parallelize

Page 23: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

List of 1,000,000 things…

Page 24: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

output = things.map(pureFn)

Page 25: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Runs across all cores*

Page 26: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Across a whole cluster.

Page 27: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Pure Functional

LISPHaskellErlangScalaElm

OCamlML

Page 28: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

24258698@N04/37656086

Page 29: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Let’s talk about js apps

Page 30: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 31: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 32: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Functional style reduces these risks

Page 33: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 34: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

With functions…

import {just, whatya, need} from “some-lib”

(ArcGIS-REST-JS is designed around this)

Page 35: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Webpack & Rollup willonly include those functions

(and anything they call)

Page 36: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

juan-alogico/10935384913

Page 37: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Functional Programmingis core to React & Angular

Page 38: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

24258698@N04/37656086

Page 39: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Avoid Inheritance

Class Guidelines

Page 40: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Except UI Frameworks (React/Angular)

Class Guidelines

Page 41: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Use Composition

Class Guidelines

Page 42: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Factory Functions vs “new”

Class Guidelines

Page 43: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Key Ideas:

Pure FunctionsImmutable Data

Referential TransparencyMany Small Functions

Higher Order Functions

Page 44: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Pure Function

Output depends only on arguments.Zero side -effects

let z = 10;const add = (a,b) => a + b;add(5,3); // 8

Page 45: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Immutable Data

Mutation of shared data is a side -effect.

Return a clone with the changes applied.

Now your function is pure.

Page 46: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Referential Transparency

Program operates the same way if you replace a function call with it’s return value.

let length = add(5,3); let length = 8;

Page 47: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Many Small Functions

We compose many smaller, generic, highly tested functions into larger

more complex functions

Page 48: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Higher Order Functions

Functions that accept or return functions.

const addN = (n) => (x) => add(n, x);const addfive = addN(5);

addfive(10) // 15[1,2,3].map(addFive) // [6,7,8]

Page 49: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Higher Order Functions

Allow us to compose functions

const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);

doThings = pipe(fn1, fn2, fn3);doThings(someInputs);

Page 50: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Functional 101

Page 51: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 52: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 53: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

“What not how”

Page 54: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

We should skip the null…

Page 55: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 56: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 57: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 58: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 59: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 60: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

.reduce(...) is the power move

Page 61: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 62: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

ExampleApplication

Page 63: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

ExampleApplication

Page 64: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

40s on Mobile

Page 65: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

https://nocotrails.surge.sh

github.com/dbouwman/trail-status-react

Page 66: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Filters

Area

Trails & Status

500ms to first paint8s to fully loaded

Page 67: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

NavBar.jsx

Area.jsx

Trail.jsx

App.jsx

500ms to first paint8s to fully loaded

Page 68: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

• Query Feature Services• Combine Results• Extract Attributes Hash• Normalize Field Names• Dedupe Segments• Group by Area• Sort by Area and Trail Name• Render

getData(state)

Page 69: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Let’s look at the data…

Page 70: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Different fieldname

nesting

Null meansClosed

Page 71: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Implementation options…

Page 72: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 73: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 74: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Compose Small Functions

Page 75: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Promise Chain makes it obvious

Page 76: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Generic composition is better

Page 77: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 78: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Merge the responses…

Page 79: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 80: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Remove nestingOf Attributes

Page 81: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 82: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 83: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 84: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

getProp(path, obj, def)

Page 85: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 86: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 87: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 88: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Remove nestingOf Attributes

Page 89: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 90: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 91: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

partial(fn, arg)

Page 92: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 93: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 94: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

NormalizeSchema

Page 95: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 96: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 97: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 98: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

maybeAdd(key, val, target)

Page 99: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 100: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

DedupeRecords

Page 101: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 102: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 103: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 104: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 105: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

ScrubRows

Page 106: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 107: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Group intoAreas

Page 108: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 109: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 110: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

SortyMcSortFace

Page 111: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Sort Areas by groupSort the Entries by name

Page 112: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 113: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 114: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

DONE!

Page 115: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Trade-offs

Page 116: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Piping creates intermediate arrays

Items processed once into final array

Page 117: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 118: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Jumping in!

Page 119: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Start with Array.map/reduce/filtercombined with pure functions

Page 120: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Bring in more helpers…

getPropsetProp

cloneObject

Page 121: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

Bring in libraries

Page 122: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 123: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 124: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation
Page 125: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

• Professor Frisby’s Mostly Adequate Guide to Functional Programming (gitbook)

• Composing Software book by Eric Elliot – also on medium)

• So You Want to be a Functional Programmer (medium posts by Charles Scalfani)

• Functional-Light Javascript (book by Kyle Simpson – also on github)

Page 126: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

wingsofahero/3308105238

Key Ideas:

Pure FunctionsImmutable Data

Referential TransparencyMany Small Functions

Higher Order Functions

Page 127: Taming the Beast: Functional JavaScript for Sane ApplicationsTaming the Beast: Functional JavaScript for Sane Applications Author: Esri Subject: 2020 Esri Developer Summit -- Presentation

[email protected]/dbouwman/trail-status-react

Thanks!