+ All Categories
Home > Documents > Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21;...

Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21;...

Date post: 16-Aug-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
41
JavaScript JavaScript for Geographers for Geographers @jgravois @patrickarlt slides: http://bit.ly/2oSM11A
Transcript
Page 1: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

JavaScriptJavaScript for Geographersfor Geographers@jgravois

@patrickarlt

slides: http://bit.ly/2oSM11A

Page 2: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

AgendaAgenda1. Fundamentals2. Patterns3. Put it to use4. Fatigue

Page 3: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

JS can be overwhelming, but you'reJS can be overwhelming, but you'remore equipped than you think!more equipped than you think!

Page 4: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

declaring declaring variablesvariablesvar dog; > undefined // new let nifty; const notGonnaChange; > undefined

Page 5: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

de�ning valuesde�ning valuesvar dogName = 'spot'; var age = 21; var canBark = true;

value type is not explicitly declared

Page 6: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

operators operatorsarithmeticarithmetic(age / 7) // 3 5 + 5 // 10 3 - 2 // 1 3 * 2 // 6

Page 7: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

operators operatorsarithmeticarithmetic12 % 5 // 2 (modulus) var x = 5; x++ // 6 var y = 3; y-- // 2 'foo' + 'bar' // 'foobar'

Page 8: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

- operators - operatorscomparisoncomparison3 === 3 // true 3 === '3' // false 'foo' != 'bar' // true 3 > 2 // true 3 >= 2 // true

Page 9: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

operators operatorslogicallogical// logical 'and' true && anotherTruthy > true // 'or' true || somethingFalsy > true // 'not' !somethingTruthy > false

Page 10: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

arraysarraysvar dogs = ['Spot', 'Lassie']; dogs[0] // 'Spot' dogs.push('Fido'); dogs.length // 3

Page 11: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

functionsfunctionsfunction dogYears(age) { return age * 7; } dogYears(3); > 21

Page 12: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

anonymous functionsanonymous functionsfunction () { return 2*2; }

Page 13: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

functions functionsarrowarrowfunction (age) { return age*2; } // === age => { age*2; } // === age => age*2;

Page 14: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

objectsobjectslet dog = { age: 7, canBark: true, _ssshhh: 'top secret' } > Object {age: 7, canBark: true, _ssshhh: 'top secret' }

Page 15: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

objectsobjects<script src="./doglibrary.js"></script>

let spot = new Dog() > Object { canBark: true } spot.age = 21;

Page 16: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

objects - methodsobjects - methods// Buffer point by 1000 feet var ptBuff = geometryEngine.buffer(point, 1000, "feet");

Page 17: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

loops loopsforforfor (var i = 0; i < 6; i++) { console.log(i); } > 0 > 1 > 2 > 3 > 4 > 5

Page 18: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

looping through an arraylooping through an arrayvar dogs = ['Spot', 'Lassie', 'Fido']; for (var i = 0; i < dogs.length; i++) { console.log(dogs[i]); } > 'Spot' > 'Lassie' > 'Fido'

Page 19: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

JavaScript is JavaScript is AsynchronousAsynchronousJavaScript is single threadedOnly does 1 thing at a timeLots of things might happen at onceThis is the "Event Loop"

Page 20: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

JavaScript Event LoopJavaScript Event Loop1. Executes one function at a time2. Run the entire function3. Start the next function

Demo

Page 21: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

CallbacksCallbacks<button id="button">Click Me!</button>

let button = document.getElementById('button'); button.addEventListener('click', function () { console.log('The button was clicked'); });

Callback are functions that are called when things happen.

Demo

Page 22: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

PromisesPromiseslet user = fetch('https://randomuser.me/api/') .then(processResponse) .then(doSomethingWithUser) .catch(anyErrors); function processResponse (response) { return response.json(); } function doSomethingWithUser (user) { console.log(user); // prints a bunch of user info } function anyErrors (error) { console.error('what have you done!', error); }

Promises represent a future value that will be "resolved".

Demo

Page 23: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

Function ScopeFunction Scopevar message = 'Hello World!'; function go () { console.log(message); } go();

When functions are called they remember the variables around them, this isrefered to as "lexical scope".

Page 24: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

What is What is thisthis ??var user = { firstName: "Casey", lastName: "Jones", fullName: function () { console.log(this.firstName + " " + this.lastName); } } person.fullName() // > Casey Jones

Page 25: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

What is What is thisthis ??The value of this depends on how the function was called.

Demo

Page 26: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

lets set up a JS developmentlets set up a JS developmentenvironmentenvironment

do i have a web server running?demo.html

Page 27: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

debuggingdebuggingGet familiar with your dev tools!

console.log - print things to the consoledebugger - stops the application so you can look around

Page 28: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

the DOMthe DOMselect elementslisten for eventschange elements

; ;A simple form Finished example

Page 29: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

sharing JavaScript - modulessharing JavaScript - modulesAs applications grow it is helpful to divide code into different �les to organize.

You can just use <script> tags for small apps.

Page 30: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

ES2015 ModulesES2015 Modulesimport { something } from 'some-module';

This is the future as you learn JavaScript you will encounter this more often.

Page 31: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

AMD Modules (JS API)AMD Modules (JS API)require([ "esri/Map", "esri/views/MapView", ], function (Map, MapView) { // Map and MapView have been loaded! });

require is a fancy way of adding <script> tags to load code on demand.

Page 32: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

lets put all this to use!lets put all this to use!../sample-code/tasks-query/

../sample-code/chaining-promises/

Page 33: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

The JavaScript LanguageThe JavaScript LanguageUpdates every year (ES2015, ES2016, ES2017).

2015 had LOADS of new featues.

2017 had ~2 new features.

Page 34: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

the JavaScript ecosystemthe JavaScript ecosystemModule Formats - CommonJS, AMD, ES 2015Compilers - Babel, TypeScriptBundlers - Rollup, WebPack, SystemJSMini�ers - UglifyJS

Page 35: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

the JavaScript ecosystemthe JavaScript ecosystemYou don't know what you don't know.

and that is great.

Page 36: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

JavaScript FatigueJavaScript FatigueLook, it’s easy. Code everything in Typescript. All modulesthat use Fetch compile them to target ES6, transpile them

with Babel on a stage-3 preset, and load them withSystemJS. If you don’t have Fetch, poly�ll it, or use

Bluebird, Request or Axios, and handle all your promiseswith await.

We have very different de�nitions of easy.

How it feels to learn JavaScript in 2016

Page 37: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

Fight JavaScript FatigueFight JavaScript FatigueThe JS API is MORE then enough for simple appsAdd tools when you KNOW you will bene�t from using themToo many tools === Lots of complexity to manage

Page 39: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

please, please, please �ll out a session survey

1. Download the Esri Events App2. Select Dev Summit3. Search for "JavaScript for Geographers"4. Leave feedback!

Page 40: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

idea, question, issue, or success story?

/ @geogangster @patrickarlt

Slides: http://bit.ly/2oSM11A

Page 41: Jav a Sc r ip t f o r G eo g raphers - Esri · dening values var dogName = 'spot'; var age = 21; var canBark = true; value type is n o t explicitly declared

Recommended