말랑말랑 LAB

[JavaScript] _each 의 외부 다형성 높이기 본문

JavaScript/함수형 프로그래밍

[JavaScript] _each 의 외부 다형성 높이기

쭈02 2019. 1. 2. 11:19

_each 의 외부 다형성 높이기



1. _each에 null 넣어도 에러 안나게


  • 현재 정의한 _each 함수에서 첫번째 인자로 null을 넣으면 에러 발생 !
    • _each 함수 내부에서 list의 length 속성을 참조하고자 할 때, list가 null이기 때문에 에러 발생

  • 에러가 나지 않도록 처리해보자 !
    • 배열 length (list.length) 에 undefined 가 들어가면 에러는 나지 않고, for문의 조건식 평가 결과가 false이기 때문에 바로 빠져나오게 됨
    • length를 참조하는 방식을 _get함수를 통해서 참조하게 만들기만 해도 에러가 나지 않게 된다 !
    • _get 함수는 인자 값이 null 일 경우 undefined를 리턴하는 처리를 해주고 있기 때문


  • _each 함수를 사용하고 있는 _map, _filter 함수와 _map, _filter 함수를 사용한 _go 함수까지 null 값에 대한 에러 처리가 됨

    • error 는 나지 않고 빈 배열 리턴

  • 함수형 프로그래밍에서는 함수를 연속으로 실행할 때, 언제 어디서 undefined 나 잘못된 값이 들어와도 에러가 나지 않고 흘려보낼 수 있는 전략이 필요 !!

2. _keys 만들기


  • Object.keys()를 좀더 안전하게 만든 방법
    • Object.keys() : 객체에서 key값들만 뽑아주는 함수
    • 예제 - null 값에서 에러 발생 !
  • 따라서 아래와 같이 object 여부를 체크하여 object 가 아닐 때는 빈 배열을 리턴하도록 함 



3. _keys 에서도 _is_object인지 검사하여 null 에러 안나게


  • 인자의 type을 체크하여 object 여부를 리턴하는 _is_object() 생성

  • _keys() 사용하여 테스트 --> null 값도 에러 발생하지 않음



4. _each 외부 다형성 높이기


  • 아래와 같은 객체({13: 'ID', 19: 'HD', 29: 'YD'})에 대해서는 _each 함수가 동작하지 않는다
    • 이 객체는 length 가 존재하지 않으며, key 값이 순차적이지 않기 때문 !


  • 배열뿐 아니라 위와 같은 객체에 대해서도 순회하는 기능이 동작하도록 _each 함수를 변형해보자 !

    • _keys() 활용

  • _map, _filter, _go 함수에서도 역시 정상 동작함









'JavaScript > 함수형 프로그래밍' 카테고리의 다른 글

[JavaScript] pipe 함수, go 함수  (0) 2018.12.26
[JavaScript] reduce 함수  (0) 2018.12.25
[JavaScript] 커링  (0) 2018.12.24
[JavaScript] 일급 함수  (0) 2018.12.20
[JavaScript] 순수 함수  (0) 2018.12.19
Comments