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

우아한 자바스크립트 개발

Avatar for nigayo nigayo
April 13, 2018

우아한 자바스크립트 개발

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

Avatar for nigayo

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੘সਸೡѪੋо  ੉ܴਸযڌѱ૑ਸѪੋо  ஹನք౟੄௼ӝחযו੿ب۽ೡѪੋо 

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