함수형 반복

코드 냄새 하나와 리팩터링 두 개

코드의 냄새: 함수 이름에 있는 암묵적 인자

  1. 거의 똑같이 구현된 함수가 있다
  2. 함수 이름이 구현에 있는 다른 부분을 가리킨다

리팩터링: 암묵적 인자를 드러내기

  1. 함수 이름에 있는 암묵적 인자 확인
  2. 명시적 인자 추가
  3. 함수 본문에 하드코딩된 값을 새로운 인자로 바꾸기
  4. 함수 호출하는 곳 고치기

리팩터링: 함수 본문을 콜백으로 바꾸기

  1. 함수 본문에서 바꿀 부분의 앞뒷부분 확인
  2. 리팩터링할 코드를 함수로 빼내기
  3. 빼낸 함수의 인자로 넘길 부분을 또 다른 함수로 빼내기

예제를 통해 map() 함수 도출하기

function emails_for_customers(customers, goods, bests) {
	let emails = [];
	for_each(customers, function (customer) {
		let email = email_for_customer(customer, goods, bests);
		emails.push(email);
	});
	return emails;
}
function emails_for_customers(customers, goods, bests) {
	return map(customers, function (customer) {
		return email_for_customer(customer, goods, bests);
	});
}

function map(array, f) {
	let new_array = [];
	for_each(array, function (element) {
		new_array.push(f(element));
	});
	return new_array;
}

map() 은 함수형 코딩에서 자주 쓰이는 함수 중 하나이다

함수형 도구: map()

X 배열을 Y 배열로 변환하는 역할을 한다