2017年10月6日『まぼろしのJS勉強会 #1 「ナウいJSの書き方・考え方」』にて発表した資料です。
https://maboroshi.connpass.com/event/66502/ #mbrs_js_study
ͦΕɺͬͱεϚʔτʹॻ͚ΔΑ+BWB4DSJQUίʔυΛͬͱ͘ɺͬͱγϯϓϧʹॻ͘5JQTબ- My 4 favorite JavaScript clean codes -/BPLJ:"."%"!XBLBNTIBφ͍+4ͷॻ͖ํɾߟ͑ํ·΅Ζ͠ͷ+4ษڧձ
View Slide
Introductionw +BWB4DSJQUྑ͘ѱ͘ॊೈੑʹΜͩϓϩάϥϛϯάݴޠw ͪΐͬͱͷͰͳίʔυΛΑΓίϯύΫτʹɺΑΓεϚʔτʹॻ͖͑ͯΈ·͠ΐ͏
Array.prototype.indexOf()
Array.prototype.indexOf()Ҿʹͨ͠ཁૉͱಉ͡ྻཁૉ͔Β࠷ॳͷఴࣈ indexΛฦ͢ଘࡏ͠ͳ͚Ε-1Λฦ͢
use caseʰ͋Δಛఆͷཁૉ͕ྻʹ͋Δ͔Ͳ͏͔ʱͱ͍͏݅ࣜʹΑ͘ΘΕΔ
const ua = navigator.userAgent;if (ua.indexOf('iPhone') > -1 || ua.indexOf('iPod') > -1 || ua.indexOf('iPad') > -1) {return 'ios';} else {return 'other';}Bad Part
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Λͬͱγϯϓϧʹॻ͚ͳ͍ͩΖ͏͔ʜʁ
Solution~ νϧμԋࢉࢠΛ͏
~ νϧμԋࢉࢠΛ͏~ νϧμϏοτ/05ͱ͍͏ҙຯʹର࣮ͯ͠ߦ͢Δͱූ߸͕సͯ͠-1ͨ͠ͱͳΔ0-1ʹม͞Εɺ-10ʹม͞ΕΔ݅ࣜͰظ௨Γͷڍಈ͕࣮ݱͰ͖Δ
const ua = navigator.userAgent;if (~ua.indexOf('iPhone') || ~ua.indexOf('iPod') || ~ua.indexOf(‘iPad')) {return 'ios';} else {return 'other';}Good Part
console.log
use caseσόοάͷͨΊɺҰ࣌తʹϫϯϥΠφʔؔͷதʹDPOTPMFMPHΛࠐΈ͍ͨ
Bad Partary.map(item => item * 1000);ary.map(item => {console.log(item);return item * 1000;});
Bad Partary.map(item => item * 1000);ary.map(item => {console.log(item);return item * 1000;});͔ͤͬ͘ͷϫϯϥΠφʔ่͕Εͯ͠·͏Ұ࣌తͳconsole.logͷͨΊʹϒϩοΫԽ͢ΔͳͲؔͷߏΛม͑ͳͯ͘ͳΒͳ͍
Solution|| ཧԋࢉࢠΛ͏
|| ཧԋࢉࢠΛ͏ϫϯϥΠφʔؔͷઌ಄ʹconsole.logΛهड़͠ɺ||ΛڬΜͩޙΖʹຊདྷͷॲཧ͕ଓ͘Α͏ʹ͢Δconsole.logͷΓundefined͢ͳΘͪfalseͳͷͰɺ||Ҏ߱ͷॲཧඞ࣮ͣߦ͞ΕΔ
ary.map(item => item * 1000);Good Partary.map(item => console.log(item) || item * 1000);
let / const
let foo;let bar;if (new Date().getHours() < 12 ) {foo = 'forenoon';bar = 'am';} else {foo = 'afternoon';bar = 'pm';}Bad Part
let foo;let bar;if (new Date().getHours() < 12 ) {foo = 'forenoon';bar = 'am';} else {foo = 'afternoon';bar = 'pm';}Bad Partίʔυ͕ංେԽ͢ΔʹͭΕͯletՄಡੑΛଛͳ͏มએݴconstΛ͍ɺletۃྗ߇͑Δͷ͕·͍ͦ͠ΕletΘͳͯ͘ग़དྷΔΑ
Solutionଈ࣌ؔΛ͏
ଈ࣌ؔΛ͏if elseΛଈ࣌ؔʹهड़͢ΔͦΕͧΕͷϒϩοΫͷ࠷ޙʹΛreturn͢ΕΓͲͪΒ͔ҰํͷΈͱͳΔͷͰconst͕͑Δ
const {foo, bar} = (() => {if (new Date().getHours() < 12 ) {return {foo: 'forenoon',bar: 'am'};} else {return {foo: 'afternoon',bar: 'pm'}}})();Good Part
array => hash
use case63-ΫΤϦύϥϝʔλΛ࿈ྻʹύʔε͢Δ
// https://example.com/?utm_s=google&utm_m=ppc&utm_c=campaign1const params = location.search.substring(1).split('&');Bad Part// [// "utm_s=google",// "utm_m=ppc",// "utm_c=campaign1"// ]
// https://example.com/?utm_s=google&utm_m=ppc&utm_c=campaign1const params = location.search.substring(1).split('&');Bad Partconst result = {};params.forEach(param => {const pair = param.split('=');result[pair[0]] = decodeURIComponent(pair[1]);});
// https://example.com/?utm_s=google&utm_m=ppc&utm_c=campaign1const params = location.search.substring(1).split('&');Bad Partconst result = {};params.forEach(param => {const pair = param.split('=');result[pair[0]] = decodeURIComponent(pair[1]);});͍Ζ͍Ζͱ͗͢Δ࠷ॳʹۭΦϒδΣΫτΛॳظͱͯ͠ఆٛ͠ɺϧʔϓॲཧͰΛ٧Ί͍͔ͯͳͯ͘ͳΒͳ͍5ZQF4DSJQUͩͱresultanyܕͰఆٛ͢Δ͜ͱʹͳͬͯ͠·͏ͷྑ͘ͳ͍
SolutionArray.prototype.reduce
Array.prototype.reduceϧʔϓॲཧͱॳظΛ·ͱΊͯఆٛͰ͖ɺ࠷ऴ݁Ռ͚͕ͩΓͱͳΔ
const result = params.reduce((acc, param) => {const pair = param.split('=');acc[pair[0]] = decodeURIComponent(pair[1]);return acc;}, {});Good Part
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ͱશ͘ಉ͡ҧ͍Γ͕ஞ࣍ฦΔͱ͍͏ͷΈ
*OUSPEVDFNZTFMGԶͷ໊ΛݴͬͯΈΖࣗݾհ
גࣜձࣾϦΫϧʔτϚʔέςΟϯάύʔτφʔζXFCϑϩϯτΤϯυΤϯδχΞࢁా थ/BPLJ:"."%"*OUSPEVDFNZTFMG!XBLBNTIB
https://tech.recruit-mp.co.jpNET BIZ DIV. TECH BLOG
https://tech.recruit-mp.co.jp3.1 ϒϩά
5IBOLZPV