Jiyong's STUDY

간단한 연산자를 함수로 대체하는 이유? 본문

Web/Functional Programming

간단한 연산자를 함수로 대체하는 이유?

Kingjiyong 2021. 5. 26. 01:07

 

const not = v => !v;
const beq = a => b => a===b;

not은 정말 딱 not 연산만 해준다.

beq는 갈라져서 a===b 연산만 한다.

 

이건 또 왜 쓰는걸까?

_.some = list => !!_.find(list, _.identity);
_.every = list => beq(-1)(_.findIndex(list, not));

console.log(_.some([0, null, 2])); // true
console.log(_.every([0, null, 2])); // false

여기서 _.findIndex는?

const findIndex = (list, predicate) => {
  for (let i = 0, len = list.length; i < len; i++)
    if (predicate(list[i])) return i;
  return -1;
}

조건에 따라서 인덱스를 리턴해주는 함수다.

 

아무튼, some은 이전 게시글과 동일한데 every가 다르다.

_.every는 모두가 참이어야만 true를 반환하는 기능을 가졌는데,

beq를 이용하여 false === false 가 true가 됨을 이용했다.

 

이런 식으로 간단한 연산자를 함수로 대체하는 것은

자기 자신을 반환하는 _.identity와 마찬가지로 Boolean을 평가하기 위해 사용된다.