보시면 _filter와 _map함수에서 중복되는 코드를 확인하실 수 있습니다.
.
.
.
중복되는 부분
- for문(루프)
- 해당 i번째 list를 참조하는 부분
위의 중복되는 부분을 _each라는 함수로 따로 빼내서 제거할 수 있습니다.
1 | function _each(list, iter){ |
이 _each라는 함수는 인자로 list와 iter를 받아서 반복을 하는 함수입니다.
중복되는 for문을 그대로 가져오고, 받은 값을 그대로 리턴합니다.
간단히 말해 _each함수는 for문의 역할을 완전히 위임하는 함수라고 보면 됩니다.
먼저 _filter함수를 _each함수로 리펙토링합니다.
1 |
|
_each(list, function(val)) –> _each함수에서 list의 특정 i번째 요소를 하나하나씩 꺼내서 iter함수를 실행시킵니다.
위에서는 iter함수로 function(val){ if(predi(val)) new_list.push(val);} 를 보냅니다. 특정 i번째 요소들이 val로 들어가고
predi라는 조건이 true일때 val값이 new_list에 담겨 리턴됩니다.
그다음 _map함수도 _each함수로 리펙토링합니다.
1 | function _map(list, mapper){ |
_each함수에서 꺼내진 특정 i번쨰 요소들은 mapper에게 보냅니다.
여기에서는 mapper가 특정 i번쨰 요소의 name이나 age를 리턴합니다.
mapper(val)의 리턴값이 new_list에 담겨지고, 최종적으로 new_list를 리턴합니다.
.
.
.
.
다음 포스팅에서는 다형성에 대해서 배워볼게요!