Slide 1

Slide 1 text

ͦΕɺ΋ͬͱεϚʔτʹॻ͚ΔΑ +BWB4DSJQUίʔυΛ΋ͬͱ୹͘ɺ΋ͬͱγϯϓϧʹॻ͘5JQTબ - My 4 favorite JavaScript clean codes - /BPLJ:"."%" !XBLBNTIB φ΢͍+4ͷॻ͖ํɾߟ͑ํ·΅Ζ͠ͷ+4ษڧձ

Slide 2

Slide 2 text

Introduction w +BWB4DSJQU͸ྑ͘΋ѱ͘΋ॊೈੑʹ෋Μͩϓϩάϥϛϯάݴޠ w ͪΐͬͱͷ޻෉Ͱ৑௕ͳίʔυΛΑΓίϯύΫτʹɺ ΑΓεϚʔτʹॻ͖׵͑ͯΈ·͠ΐ͏

Slide 3

Slide 3 text

Array.prototype.indexOf()

Slide 4

Slide 4 text

Array.prototype.indexOf() Ҿ਺ʹ౉ͨ͠ཁૉͱಉ͡഑ྻཁૉ͔Β࠷ॳͷఴࣈ index Λฦ͢ ଘࡏ͠ͳ͚Ε͹-1Λฦ͢

Slide 5

Slide 5 text

use case ʰ͋Δಛఆͷཁૉ͕഑ྻ಺ʹ͋Δ͔Ͳ͏͔ʱͱ͍͏ ৚݅ࣜʹΑ͘࢖ΘΕΔ

Slide 6

Slide 6 text

const ua = navigator.userAgent; if (ua.indexOf('iPhone') > -1 || ua.indexOf('iPod') > -1 || ua.indexOf('iPad') > -1) { return 'ios'; } else { return 'other'; } Bad Part

Slide 7

Slide 7 text

const ua = navigator.userAgent; if (ua.indexOf('iPhone') > -1 || ua.indexOf('iPod') > -1 || ua.indexOf('iPad') > -1) { return 'ios'; } else { return 'other'; } Bad Part ͦͷ··ͩͱ࢖͍ʹ͍͘ ഑ྻͷઌ಄ʹ஋͕͋Δͱ໭Γ஋͕0ͳͷͰfalseͱͳΓɺ஋͕ແ͍ͱ-1ͳͷ Ͱtrueͱͳͬͯ͠·͏ ୯७ʹ஋͕͋Δ͔Ͳ͏͔Λ஌Γ͍͚ͨͩͳͷͰɺ > -1Λ΋ͬͱγϯϓϧʹॻ ͚ͳ͍ͩΖ͏͔ʜʁ

Slide 8

Slide 8 text

Solution ~ νϧμ ԋࢉࢠΛ࢖͏

Slide 9

Slide 9 text

~ νϧμ ԋࢉࢠΛ࢖͏ ~ νϧμ ͸Ϗοτ/05ͱ͍͏ҙຯ ੔਺ʹର࣮ͯ͠ߦ͢Δͱූ߸͕൓సͯ͠-1ͨ͠஋ͱͳΔ 0͸-1ʹม׵͞Εɺ-1͸0ʹม׵͞ΕΔ ৚݅ࣜͰظ଴௨Γͷڍಈ͕࣮ݱͰ͖Δ

Slide 10

Slide 10 text

const ua = navigator.userAgent; if (~ua.indexOf('iPhone') || ~ua.indexOf('iPod') || ~ua.indexOf(‘iPad')) { return 'ios'; } else { return 'other'; } Good Part

Slide 11

Slide 11 text

console.log

Slide 12

Slide 12 text

use case σόοάͷͨΊɺҰ࣌తʹϫϯϥΠφʔؔ਺ͷதʹ DPOTPMFMPHΛ࢓ࠐΈ͍ͨ

Slide 13

Slide 13 text

Bad Part ary.map(item => item * 1000); ary.map(item => { console.log(item); return item * 1000; });

Slide 14

Slide 14 text

Bad Part ary.map(item => item * 1000); ary.map(item => { console.log(item); return item * 1000; });

Slide 15

Slide 15 text

Bad Part ary.map(item => item * 1000); ary.map(item => { console.log(item); return item * 1000; }); ͔ͤͬ͘ͷϫϯϥΠφʔ่͕Εͯ͠·͏ Ұ࣌తͳconsole.logͷͨΊʹϒϩοΫԽ͢ΔͳͲؔ਺ͷߏ଄Λม͑ͳͯ͘ ͸ͳΒͳ͍

Slide 16

Slide 16 text

Solution || ࿦ཧ࿨ ԋࢉࢠΛ࢖͏

Slide 17

Slide 17 text

|| ࿦ཧ࿨ ԋࢉࢠΛ࢖͏ ϫϯϥΠφʔؔ਺ͷઌ಄ʹconsole.logΛهड़͠ɺ||ΛڬΜͩޙΖʹຊདྷͷ ॲཧ͕ଓ͘Α͏ʹ͢Δ console.logͷ໭Γ஋͸undefined͢ͳΘͪfalseͳͷͰɺ||Ҏ߱ͷॲཧ ͸ඞ࣮ͣߦ͞ΕΔ

Slide 18

Slide 18 text

ary.map(item => item * 1000); Good Part ary.map(item => console.log(item) || item * 1000);

Slide 19

Slide 19 text

ary.map(item => item * 1000); Good Part ary.map(item => console.log(item) || item * 1000);

Slide 20

Slide 20 text

let / const

Slide 21

Slide 21 text

let foo; let bar; if (new Date().getHours() < 12 ) { foo = 'forenoon'; bar = 'am'; } else { foo = 'afternoon'; bar = 'pm'; } Bad Part

Slide 22

Slide 22 text

let foo; let bar; if (new Date().getHours() < 12 ) { foo = 'forenoon'; bar = 'am'; } else { foo = 'afternoon'; bar = 'pm'; } Bad Part ίʔυ͕ංେԽ͢ΔʹͭΕͯlet͸ՄಡੑΛଛͳ͏ ม਺એݴ͸constΛ࢖͍ɺlet͸ۃྗ߇͑Δͷ͕๬·͍͠ ͦΕlet࢖Θͳͯ͘΋ग़དྷΔΑ

Slide 23

Slide 23 text

Solution ଈ࣌ؔ਺Λ࢖͏

Slide 24

Slide 24 text

ଈ࣌ؔ਺Λ࢖͏ if elseΛଈ࣌ؔ਺಺ʹهड़͢Δ ͦΕͧΕͷϒϩοΫ಺ͷ࠷ޙʹ஋Λreturn͢Ε͹໭Γ஋͸ͲͪΒ͔ҰํͷΈͱ ͳΔͷͰconst͕࢖͑Δ

Slide 25

Slide 25 text

const {foo, bar} = (() => { if (new Date().getHours() < 12 ) { return { foo: 'forenoon', bar: 'am' }; } else { return { foo: 'afternoon', bar: 'pm' } } })(); Good Part

Slide 26

Slide 26 text

array => hash

Slide 27

Slide 27 text

use case 63-ΫΤϦύϥϝʔλΛ࿈૝഑ྻʹύʔε͢Δ

Slide 28

Slide 28 text

// https://example.com/?utm_s=google&utm_m=ppc&utm_c=campaign1 const params = location.search.substring(1).split('&'); Bad Part // [ // "utm_s=google", // "utm_m=ppc", // "utm_c=campaign1" // ]

Slide 29

Slide 29 text

// https://example.com/?utm_s=google&utm_m=ppc&utm_c=campaign1 const params = location.search.substring(1).split('&'); Bad Part const result = {}; params.forEach(param => { const pair = param.split('='); result[pair[0]] = decodeURIComponent(pair[1]); });

Slide 30

Slide 30 text

// https://example.com/?utm_s=google&utm_m=ppc&utm_c=campaign1 const params = location.search.substring(1).split('&'); Bad Part const result = {}; params.forEach(param => { const pair = param.split('='); result[pair[0]] = decodeURIComponent(pair[1]); }); ͍Ζ͍Ζͱ৑௕͗͢Δ ࠷ॳʹۭΦϒδΣΫτΛॳظ஋ͱͯ͠ఆٛ͠ɺϧʔϓॲཧ಺Ͱ஋Λ٧Ί͍͔ͯͳ ͯ͘͸ͳΒͳ͍ 5ZQF4DSJQUͩͱresult͸anyܕͰఆٛ͢Δ͜ͱʹͳͬͯ͠·͏ͷ͸ྑ͘ͳ͍

Slide 31

Slide 31 text

Solution Array.prototype.reduce

Slide 32

Slide 32 text

Array.prototype.reduce ϧʔϓॲཧͱॳظ஋Λ·ͱΊͯఆٛͰ͖ɺ࠷ऴ݁Ռ஋͚͕ͩ໭Γ஋ͱͳΔ

Slide 33

Slide 33 text

const result = params.reduce((acc, param) => { const pair = param.split('='); acc[pair[0]] = decodeURIComponent(pair[1]); return acc; }, {}); Good Part

Slide 34

Slide 34 text

const result = params.reduce((acc, param) => { const pair = param.split('='); acc[pair[0]] = decodeURIComponent(pair[1]); return acc; }, {}); Good Part ϧʔϓॲཧͷ్தஈ֊ͷ஋΋ஞ࣍ཉ͍͠ͱ͖͸ɺ3Y+4ͷscanΛ࢖͑͹0, ॻ͖ํ͸reduceͱશ͘ಉ͡ ҧ͍͸໭Γ஋͕ஞ࣍ฦΔͱ͍͏఺ͷΈ

Slide 35

Slide 35 text

*OUSPEVDFNZTFMG Զͷ໊ΛݴͬͯΈΖ ࣗݾ঺հ

Slide 36

Slide 36 text

גࣜձࣾϦΫϧʔτϚʔέςΟϯάύʔτφʔζ XFCϑϩϯτΤϯυΤϯδχΞ ࢁా ௚थ /BPLJ:"."%" *OUSPEVDFNZTFMG !XBLBNTIB

Slide 37

Slide 37 text

https://tech.recruit-mp.co.jp NET BIZ DIV. TECH BLOG

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

https://tech.recruit-mp.co.jp 3.1 ϒϩά

Slide 40

Slide 40 text

5IBOLZPV