Upgrade to Pro — share decks privately, control downloads, hide ads and more …

우아한 자바스크립트 개발

nigayo
April 13, 2018

우아한 자바스크립트 개발

자바스크립트 코딩을 좀더 우아하게 하는 방법을 고민합니다.

nigayo

April 13, 2018
Tweet

Other Decks in Technology

Transcript

  1. ࢎਊೞחଃ௏٘ܳݢ੷ҳഅೞӝ const modal = new Modal({..}); const slider = new

    Slider({..}); const service = new ServiceMain(); service.addPlugin(modal, slider); service.on({//do something}); য࢝ೞ૑ঋਸٸө૑ೠ׮ ੿݈ ௾ੌೠѢ׮
  2. ৘ডযইצ৘ডযب৘ডয׮ async function async() { const int = 3; var

    array = await resolveAfter2Seconds(); console.log(array); }
  3. circle = 3.14 * r * r; d = _erx

    * 999; ੄޷হחं੗חઁߊj
  4. //ೣࣻࢶ঱ function execSomething({ width, height }) { console.log(width, height); }

    //ࠗܰӝ execSomething({ width: 20, height: 400, maxNumber: 300, minNumber: 100 }); PCKFDUMJUFSBMܳ੉ਊೠݒѐ߸ࣻ੹׳
  5. ઑѤޙ਷ೣࣻܳજই೧ਃ if( n % 1 === 0 ) {
 console.log(“੿ࣻ׮

    ੔”)
 } if( isInt(n) ) {
 console.log(“੿ࣻ׮ ੔”)
 } +
  6. ա־ݶӝࢄ੉ߓоظਃ const data = []; [1,2,3,4,5].forEach((v,i) => { if(v%2) {

    data.push(v); console.log(`${v} is added`); } }); [1,2,3,4,5].filter(v => v%2).forEach(v=>console.log(`${v} is added`)); ߹۽ જই
  7. ࢎҊ੄൒ܴਵ۽ز੘ೞחѤ׮જ׮ DIBJOJOH DPNQPTJUJPO const ArrayParser = str => { return

    pipe(splited, _map(trimed), _map(removeBracket), resultToObj)(str) }
  8. function Animal(name) { this.name = name; } Animal.prototype.speak = function()

    { console.log(this.name + ' makes a noise.'); } function Dog(name) { Animal.call(this,name); } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.speak = function() { console.log(this.name + ' barks.'); } var myDog = new Dog("ൟو੉"); myDog.speak(); class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal { speak() { console.log(this.name + ' barks.'); } } var d = new Dog('ൟو੉'); d.speak(); Ӓؘ۠ QSPUPUZQF਷ঌҊॳӝਃ` ׳௓ೞ׮
  9. addEventListener('fetch', event => { event.respondWith(async function() { const cache =

    await caches.open(‘v1'); const cachedResponse = await cache.match(event.request); if (cachedResponse) { return cachedResponse;} const fetchedResponse = await fetch(event.request); const fetchObj = await cache.put(event.request, fetchedResponse.clone()); return fetchedResponse; }()); }); self.addEventListener('fetch', function(event) { event.respondWith( caches.open('v1').then(function(cache) { return cache.match(event.request).then(function (response) { return response || fetch(event.request).then(function(response) { cache.put(event.request, response.clone()); return response; }); }); }) ); }); ҡଳই ؊જই 0 оә੸؊աইࠁ੉חޙߨࢎਊ
  10. function run(arg) {
 if(arg !== 10) return;
 //do something…
 }

    ইצѤ ࡈܻ߈ജೞӝ ߈ࠂޙীࢲחࡈܻDPOUJOVF FMTFޙب೙ਃহ׮
  11. for (let i = range - 1; i < d.length;

    i++) { let sum = 0; for (let j = (i - range + 1); j <= (i); j++) { sum += d[j]; } result.push(sum); } for(var i=0; i<range; i++) { sum += d[i]; } for(var j=i-1; j<d.length; j++) { if(j === (range-1)) { console.log(j + "ө૑੄ "+ range + "ѐ੄ ೤਷ : ", sum); continue; } let start = j-(range); sum += d[j] - d[start]; console.log(j + 1 + "ө૑੄" + range + "ѐ੄ ೤਷ : ", sum); } …. ઺୏ Ӓրշف૑݈ӝ ߹۽ જই ଵҊߓৌ<j/>ө૑઺ ୭Ӕ.Ѥ੄ಣӐਸҳೞח೐۽Ӓ۔઺
  12. ࠂ੟ೞݶ ա־ࣁਃ return Array.from && Array.from({length: 40}, (v,i)=>++i) || Array.apply(null,{length:

    40}).map(Function.call, Number).map((v)=> ++v); ٣ߡӦ੉एਕ૑חѤؒ
  13. attr = (el, ...attr) =>(attr.some((k, i)=>{ eif(i % 2) return;

    econst v = attr[i + 1]; eif(typeof el[k] == 'function') el[k](...(Array.isArray(v)? v :[v])); eelse if(k[0] == '@') el.style[k.substr(1)] = v; eelse el[k] = v; }), el); //ࢎਊ attr(sel(`#btn1`), e'@background', 'red', //झఋੌ e'innerHTML', 'write', //ࣘࢿ e'addEventListener', ['click', _=>post()] //੉߮౟੿੄ ); য٣ࢲࠌ؊ۄ ࠂ੟ೠ֗ࢳਸऀѹߡܻӝ
  14. ё୓ҙ҅ܳాೠઑѤޙহগӝ const moveCharacter = ({character, cmd, step}) => { //actionsਸ

    ҙ҅۽ ࢸ੿೧فӝ. const Actions = { run(character,step) { return `${character} run ${step} meter`; }, jump(character, step) { return `${character} jump ${step} meter`; }, swim(character,step) { return ` ${character} swim ${step} meter`; } }; return Actions[cmd] && Actions[cmd](character, step); } moveCharacter({character:"crong", cmd:"jump", step:300}); moveCharacter({character:"codesquad", cmd:"run", step:10}); moveCharacter({character:"crong", cmd:"swim", step:1000});
  15. ٸۿ ࢚ࣘ؀न NJYJO੉ա೤ࢿ DPNQPTJUJPO  //Super class const Character =

    class { constructor(name) { this.name = name; } } //methods function walk() { console.log(this.name, "is walking")} function run() { console.log(this.name, "is running")} function jump() { console.log(this.name, "is jumping")} function swim() { console.log(this.name, "is swimming:")} function fly() { console.log(this.name, "is flying")} let man = new Character("caly"); walker = Object.assign(man, {walk, run}); let spyderMan = new Character("robert"); walker = Object.assign(spyderMan, {walk, run, jump}); let ironMan = new Character("caly"); walker = Object.assign(walker, {walking}, {running}, {jumping}, {fly}); spyderMan.run();
  16. ࢲ࠳ӝמ੉߄Ոٜ ݫੋӝמ਷Ӓ؀۽׮ ੄ઓࢿਸ઱ੑೞҊ ࠺तೠز੘਷ੌҙػ"1*۽ز੘ %* 0$1 MPDBMTUPSBHF JOEFYFE%# const A

    = class { … getDage(data) { //ࢲ࠳ӝמ ݽف getDataܳ ࢎਊ
 return this.repo.getData();
 }
 } const a = new A(new idxDBStrorage());
  17. ೙ࣻоইפݶ ২࣌ਵ۽ઁҕ var options = { tooltip: { grouped: true,

    template: function(category, items, categoryTimestamp) { var head = '<div>' + category + '</div>', body = tui.util.map(items, function(item) { return '<div>' + item.value + ':' + item.legend + '</div>' }),join(''); return head + body; } } }; tui.chart.lineChart(container, data, options); DPEFIUUQTHJUIVCDPNOIOFOUUVJDIBSUCMPCQSPEVDUJPOEPDTXJLJGFBUVSFTUPPMUJQNEFYBNQMF
  18. ௿ېझী উ੹੢஖݃۲ೞӝ const privateMethods = { privateMethod () { console.log(this.say);

    } } export default class Service { constructor () { this.say = "Hello"; } publicMethod () { privateMethods.privateMethod.call(this); } } DPEFIUUQTNFEJVNDPN!EBWJESIZTXIJUFQSJWBUFNFNCFSTJOFTECDDEB 4ZNCPMTਸ੉ਊೡࣻب੓׮ೣ
  19. ੤ࢎਊۄ੉࠳۞ۄݶ DVTUPNFSSPSبݧ૗ class MyError extends Error { constructor(message) { super(message);

    this.message = message; this.name = '[FOO Service Error]'; } } class FooTypeError extends MyError { constructor(message) { super(message); this.message = message; this.name = '[FOO Service Type Error]'; if (Error.captureStackTrace) { Error.captureStackTrace(this, FooTypeError)} } } function setName(name) { if(typeof name !== "string") throw new FooTypeError("setName() : string ఋੑ݅ ೲਊ೤פ׮"); //do something } function run() { try { setName(12345); }catch (e) { if(e instanceof MyError) { console.log(` ${e.stack}`); } else { console.log(e); } } } run(); VM922:28 [FOO Service Type Error]: setName() : string ఋੑ݅ ೲਊ೤פ׮
  20. ղࠗܳࠁഐೞۄ const _ = (function CodeSquadUtil() { let innerValue =

    ""; const print = function(msg) {console.log(msg)} const min = function() { return 'min'}; const sumBy = function() {}; const round = function() {}; return {min, sumBy, round} })(); console.log(_.min());
  21. ݯߡ߸ࣻח੹৉߸ࣻ৬ޤо׮ܲо class Todo { constructor(id, task){ this.id = id; this.task

    = task; this.state = ‘todo; this.time = {}; this.Seconds = 1000; this.resultList = 1000; this.lastTime = 1000; this.buffer = 1000; } update(state){ this.state = state; } …
  22. class smartCollection extend Array { exec() { …} } Ѥ٧ࣻ੓׮Ҋ

    Ѥ٘۰ঠೞחѤইפ׮ OBUJWF"1*ա ۄ੉࠳۞ܻחખ؊উ੹ೞѱഛ੢ೞӝ
  23. જ਷بҳبॳӝաܴ੉׮ 'SBNFXPSLח୭ࣗೠ੄ࣻળਸਬ૑೧ળ׮ ࠺زӝ୊ܻחযוद੼ীೡѪੋо  যڌѱUFNQMBUJOH੘সਸೡѪੋо  ੉ܴਸযڌѱ૑ਸѪੋо  ஹನք౟੄௼ӝחযו੿ب۽ೡѪੋо 

    ؘ੉ఠ୊ܻחযڃݫࢲ٘ܳॳݶࢲ୊ܻೡѪੋо  ஹನք౟р੄ؘ੉ఠ੹׳਷যڌѱೡѪੋо  ೐ۨ੐ਕ௼о਋ܻ௏٘ܳ௿ܽೞѱ೧઱૓ঋ؊ۄ