[개념잡기] 함수형 프로그래밍 - (8) 다형성 높이기
서론
이번 포스팅에서는 지금까지 작성했던 함수들의 다형성을 높이는 작업을 해보겠다.
함수형 프로그래밍
each 함수 error 처리
const _each = (list, iter) => {
for(var i = 0; i < list.length; i++) {
iter(list[i])
}
}
_each(null, function(val) {console.log(val)})
// Uncaught TypeError: Cannot read property 'length' of null
each
함수는 리스트로 null 값이 들어가게 되면 error가 발생한다. each 에 get 함수를 이용하여 null 검사를 해보겠다.
const _length = _get("length")
const _each = (list, iter) => {
for(var i = 0, len = _length(list); i < len; i++) {
iter(list[i])
}
}
함수형 프로그래밍에서는 어떤 예외처리를 할때 try catch
문을 작성하기 보다, 예외적인 값이 들어와도 동작할 수 있게 설계한다.
keys
Object.keys
는 해당 오브젝트의 키를 뽑아주는 것인데 null 이 들어갈 시 error 를 발생시킨다. null 이 입력되었을때 빈배열을 리턴하는 keys
함수를 만들어 보겠다.
const _is_object = (obj) => {
return typeof obj == 'object' && !!obj
}
const _keys = (obj) => {
return _is_object(obj) ? Object.keys(obj) : []
}
console.log(_keys({"name": "PAPICO", "age": 20})) // (2) ["name", "age"]
console.log(_keys(null)) // []
위 코드와 같이 함수형 프로그래밍은 다형성을 높이는 것이 중요하다.
each 다형성 향상
현재 each
함수는 리스트만 순회가능 하지만 방금 작성하였던 keys
함수를 이용하면 배열형태의 객체도 순회할 수 있도록 변형 가능할 것이다.
const _each = (list, iter) => {
var keys = _keys(list)
for(var i = 0, len = keys.length ; i < len; i++) {
iter(list[keys[i]])
}
}
_each([1, 2, 3, 4], console.log)
// 1
// 2
// 3
// 4
_each({'user': 'papico', 'age': '20'}, console.log)
// papico
// 20
list의 keys를 뽑아네 배열 형태로 저장한 후 keys의 length를 이용해 list를 순회하는 방법을 사용했다.
each
함수의 다형성을 높였을 뿐인데 each
함수를 사용하는 map
, filter
함수도 다형성이 올라갔다.
_go(users,
_map(user => user.name),
_map(name => name.toLowerCase()),
console.log)
마무리
여러가지 함수들의 다형성을 높이는 작업을 수행했다.
'Study > VanillaJS' 카테고리의 다른 글
[개념잡기] 컬렉션 중심 프로그래밍 - (1) 수집하기 (map, values, plunk) (0) | 2019.03.11 |
---|---|
[개념잡기] 함수형 프로그래밍 - (9) 마무리 (0) | 2019.03.09 |
[개념잡기] 함수형 프로그래밍 - (7) go, pipe (0) | 2019.03.07 |
[개념잡기] 함수형 프로그래밍 - (6) call (0) | 2019.03.06 |
[개념잡기] 함수형 프로그래밍 - (5) reduce (0) | 2019.03.04 |