[javascript] javascript boot camp 16기 여덟번째 수업 배열 메소드 참고자료

2020-09-14

타이머 다루기 함수

항상 재사용성을 고려한 코드를 짜자. 재활용 가능 + 종속성을 최소화하는 코드가 좋은 코드

let clock = document.getElementById('clock');
let option24h = document.querySelector('#use24hour');
let show24h = false;

// 시간이 12보다 크면 -12
// 시간이 12보다 같거나 작으면 그대로 표시
const pad = n => n < 10 ? '0'+n : n;
const displayHour = hour => hour > 12 ? hour - 12 : hour;

function displayClock() {
  let now = new Date();
  const hour = pad(show24h ? now.getHours() : displayHour(now.getHours()));
  const min = pad(now.getMinutes());
  const sec = pad(now.getSeconds());
  const msec = pad(now.getMilliseconds());

  clock.innerText = `${hour}:${min}:${sec}.${msec}`;
}

option24h.addEventListener('change', (event) => {
  show24h = event.target.checked;
})

setInterval(displayClock, 1000);

구조분해할당 요즘 굉장히 많이 쓰는 연산자.

let clock = document.getElementById('clock');
let option24h = document.querySelector('#use24hour');
let show24h = false;

// 시간이 12보다 크면 -12
// 시간이 12보다 같거나 작으면 그대로 표시
const pad = n => n < 10 ? '0'+n : n;
const displayHour = hour => hour > 12 ? hour - 12 : hour;
const splitTime = () => {
  let now = new Date();

  return {
    hour: now.getHours(),
    min: now.getMinutes(),
    sec: now.getSeconds(),
    msec: now.getMilliseconds(),
  }

  // 잠재적인 종속성을 최소화한 utility 함수를 만들었다..
}

function displayClock() {
  const time = splitTime();
  const hour = pad(show24h ? time.hour : displayHour(time.hour));
  const min = pad(time.min);
  const sec = time.sec;
  const msec = time.msec;

  // 하지만 구문적으로 마음에 안들어서 .. time. 이렇게 꺼내는게 맘에 안들어서 구조 분해 할당을 사용해서 편리하게 만든다.

  clock.innerText = `${hour}:${min}:${sec}.${msec}`;
}

option24h.addEventListener('change', (event) => {
  show24h = event.target.checked;
})

setInterval(displayClock, 1000);

let clock = document.getElementById('clock');
let option24h = document.querySelector('#use24hour');
let show24h = false;

// 시간이 12보다 크면 -12
// 시간이 12보다 같거나 작으면 그대로 표시
const pad = n => n < 10 ? '0'+n : n;
const displayHour = hour => hour > 12 ? hour - 12 : hour;
const splitTime = () => {
  let now = new Date();

  return {
    hour: now.getHours(),
    min: now.getMinutes(),
    sec: now.getSeconds(),
    msec: now.getMilliseconds(),
  }

  // 잠재적인 종속성을 최소화한 utility 함수를 만들었다..
}

function displayClock() {
  const { hour, min, sec, msec } = splitTime();
  const hour = show24h ? hour : displayHour(hour);

  // 하지만 구문적으로 마음에 안들어서 .. time. 이렇게 꺼내는게 맘에 안들어서 구조 분해 할당을 사용해서 편리하게 만든다.

  clock.innerText = `${hour}:${min}:${sec}.${msec}`;
}

option24h.addEventListener('change', (event) => {
  show24h = event.target.checked;
})

setInterval(displayClock, 1000);

확산(spread)

숨쉬듯이 많이 쓰는 테크닉

let 열대과일 = {name: '두리안', name:'파파야', name:'아보카도'};
let 맛있는과일 = {name: '사과', name: '', name: '수박'};
let 과일 = {...맛있는과일, ...열대과일};

let obj = {
    a: 1, b: 2, c: 3,
}
let otherObj = {
    
}
let newObj = {
    ...obj
}

// newObj.a = 20;  // 흩어져서 다시 만든거라 참조가 끊기고 복사가 됌
// let newObj = { ...obj, a: 20 }; // 이거 또한 참조끊기고 복사가 되는. replace 느낌으로다가 씀

console.log(obj, newObj);
// console.log(과일);

Canvas 객체 마우스 따라가기

let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
let cursor = {
  x: 0,
  y: 0
};

canvas.addEventListener('mousemove', function(event) {
  cursor.x = event.clientX;
  cursor.y = event.clientY;
});

function paint() {
  context.fillStyle = 'white';
  context.fillRect(0, 0, 300, 300);

  context.fillStyle = 'red';
  context.fillRect(cursor.x-15, cursor.y-15, 30, 30);
}

setInterval(paint, 1000/100);

로직을 실행시키는게 아니라 데이터 상태에 따라서 UI가 바뀌는게 굉장히 심플하다.
로직 실행이 아니라 데이터로 상태를 관리하는걸 통칭 상태머신 이라고 한다..
뜻은 광범위함.