3. 함수형 코드 만들기, 별 그리기 & 구구단

gicomong·2021년 3월 14일
2
post-thumbnail

1). while문

(1) 변경 전

  • while : 언제까지 반복할 건지 사용
  • 아래 코드는 while문을 사용해, 0 ~ 9를 출력하는 코드이다.
function f10(end) {
  let i = 0;
  while(i < end) {
    ++i;
    console.log(i)
  }
}
f10(10);

(2) while => range로 변경하자

  • L.range(start, end, interval) : start ~ end 범위에 해당하는 이터러블
  • _.each(발생시킬 코드, 이터러블) : 이러터블을 반복할 때, 발생시킨 코드를 실행
function f13(end) {
  _.each(console.log, L.range(1, end, 2));
}
f13(10);



2) 별 그리기

(1) 방법1, 한 개의 go()만 사용

  • L.func를 하면 결과값을 산출하지 않아 더 효율적임
  • 단지 이터러블(반복가능)이 될 뿐임
_.go(
  L.range(1, 6),           //while
  L.map(L.range),          //원소값 변형 + while
  L.map(L.map(_ => '*')),  // 원소값 변형 + 원소값 변형
  L.map(_.reduce((a, b)=> `${a}${b}`)), //원소값 변형 + 합치기
  _.reduce((a,b) => `${a}\n${b}`),      //합치기
  console.log
)

(2) 방법2, 두 개의 go()만 사용

_.go(
  L.range(1, 6),       // 1~6 범위
  L.map(s => _.go(     //   인자 1  
    L.range(s),        //   범위 ~1
    L.map(_ => '*'),   //   원소를 *로 변형
    _.reduce((a, b)=> `${a}${b}`)   //(acculate, 인자)
  )),
  _.reduce((a,b) => `${a}\n${b}`),
  console.log
)

(2) 방법3, reduce함수 변형

const join = sep =>  _.reduce((a,b) => `${a}${sep}${b}`);
_.go(
  L.range(1, 6), 
  L.map(L.range),
  L.map(L.map(_ => '*')),
  L.map(join('')),
  join('\n'),
  console.log
)


3) 구구단

_.go(
  L.range(2, 10),                    //while
  L.map(a => _.go (                    //원소변형
    L.range(1, 10),                    //while
    L.map(b => `${a}x${b}=${a*b}`),      //원소변형
    join('\n')
  )),
  join('\n\n'),
  console.log
)
profile
⚠ 이 블로거는 퇴근 후 극심한 피로감 + 강렬한 휴식 욕구로 인해 일주일 이상 포스팅이 없을 수 있습니다. 하지만 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글