문법 · JS · beginner

함수: 선언, 화살표, 스코프, 순수 함수

solve를 작은 함수로 나누고, 부수 효과와 반환을 구분합니다.

배우기 · JavaScript 문법 · 14분 · 4/10 · javascript · 함수

이 트랙 목차 (10)
  1. 1. 값·변수·타입: let, const, Number, String
  2. 2. 조건과 논리: if, else, &&, ||, 삼항
  3. 3. 반복: for, while, for...of, 배열 메서드
  4. 4. 함수: 선언, 화살표, 스코프, 순수 함수
  5. 5. 배열과 문자열 다루기
  6. 6. 객체·Map·Set
  7. 7. 비동기 맛보기 (문제 범위 밖이지만)
  8. 8. 오류 읽기: TypeError · undefined · 스택
  9. 9. 정규식 맛보기: test · match · replace
  10. 10. JSON 파싱 맛보기

선언 방식

function add(a, b) {
  return a + b;
}

const add2 = (a, b) => a + b;
const add3 = (a, b) => {
  return a + b;
};

화살표 함수는 this 바인딩이 다릅니다. 알고리즘 문제에서는 보통 this를 쓰지 않으므로 둘 다 괜찮습니다.

기본 인자·나머지

function greet(name = 'guest') {
  return `hi ${name}`;
}
function sum(...nums) {
  return nums.reduce((a, b) => a + b, 0);
}

순수에 가깝게

같은 입력이면 같은 출력을 내고, 외부 배열을 직접 수정하지 않는 편이 테스트하기 쉽습니다.

// 비추천: 원본 정렬
function bad(arr) {
  arr.sort((a, b) => a - b);
  return arr;
}

// 추천
function good(arr) {
  return [...arr].sort((a, b) => a - b);
}

채점 입력을 돌연변이하면 다음 케이스가 깨질 수 있습니다 (환경에 따라).

조기 반환

function solve(input) {
  const s = input.trim();
  if (!s) return '0';
  // 본 로직
}

예외·빈 입력을 위에서 끊으면 본문이 단순해집니다.

재귀는 다음 단계

함수가 자기 자신을 부르는 것은 알고리즘 원리 · 재귀 레슨에서 다룹니다.
문법만으로도 solve를 헬퍼로 쪼개 쓰는 연습이 충분합니다.

헬퍼로 쪼개기

function parseNums(input) {
  return input.trim().split(/\s+/).map(Number);
}
function solve(input) {
  const [a, b] = parseNums(input);
  return String(a + b);
}

채점 진입점은 solve 하나여도, 안은 작은 함수로 나누면 테스트·읽기가 쉽습니다.

클로저 맛보기

function counter() {
  let n = 0;
  return () => ++n;
}

알고리즘 문제에서는 드물지만, “함수가 환경을 기억한다”만 알아 두세요.

관련 짧은 원리

관련 문제