지금 숫자 몇 개만 생각해보자.
두개의 질문을 던저보자.
1. 모든 수가 양수인가? 2. 모든 수가 음수인가?
이 질문에, 답변 될 수 있는 케이스는 아래와 같다.
모든 수가 양수이다. | 모든 수가 음수이다. | |
1 | false | false |
2 | false | true |
3 | true | false |
4 | true | true |
1번 케이스의 경우에는 양수와 음수가 섞여있을 것이고,
2, 3번 케이스는 상상하기 쉬울 것이다.
4번 케이스는 무엇일까? 대부분은 이 케이스겠지만......
자 잠깐만, 고등학생 때로 돌아가 보도록 하자. 수학의 정석을 1장을 열시히 읽던 그때로 말이다. 아마 내 생각에는 집합과 명제부분이였던걸로 기억한다.
x < 0인 음수만 있는 집합 N
x >= 0인 양수만 있는 집합 P
두 집합이 있다고 하였을 때, 방금 전에 떠올린 집합 Q가 있다고 하였을 때,
위의 케이스들은 아래처럼 표현 할 수 있는 것이다.
1. N ∩ Q = Q - P이고, P ∩ Q = Q - N이다.
2. N ∩ Q = ∅이고, P ∩ Q = Q이다.
3. N ∩ Q = Q이고, P ∩ Q = ∅이다.
4. N ∩ Q = Q이고, P ∩ Q = Q이다.
자 이렇게 표현해보니, 4번의 케이스의 경우 Q = ∅인 것을 눈치를 챘을 것이다. 즉 아무런 숫자도 생각을 안 했다면, 4번의 케이스가 된다는 것이다.
자 간단하게, 이제 수학 말고, 코드로 따져 보도록 하자.
console.log( [].every(v => v >= 0) ) // true
console.log( [].every(v => v < 0) ) // true
우리는 every를 사용 할 때, 빈 배열인 경우 true 값이 나온다는 것을 알아야 한다.
=> 배열이 비어있는 경우 실행 하면 안되는 코드를 실행하면 안된다!
https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.every
every
acts like the "for all" quantifier in mathematics. In particular, for an empty array, it returnstrue .
위의 내용 대로 every는 수학의 보편 양화사와 같다고 표현 되어있으며, 빈 배열인 경우 true를 리턴한다고 되어있다. 당연하게도 여기서 빈 배열이라는 것은 희소배열인 경우도 포함된다.
some
그렇다면, some은 어떨까? some은 표현으로 하자면, 존재하나?로 표현 될 것이다.
위의 질문을 다시 해보자. 1. 양수가 존재한다. 2. 음수가 존재한다.
양수가 존재한다. | 음수가 존재한다. | |
1 | false | false |
2 | false | true |
3 | true | false |
4 | true | true |
솔직히 말하자면, 이 케이스의 경우 어떤 헷갈리는 케이스도 존재 하지 않는다.
이번엔 아무 생각도 하지 않은 케이스는 1번이 될 것이다.
코드로 살펴 보도록 하자.
console.log( [].some(v => v >= 0) ) // false
console.log( [].some(v => v < 0) ) // false
https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.some
some
acts like the "exists" quantifier in mathematics. In particular, for an empty array, it returnsfalse .
some의 경우 존재양화사를 따른다고 한다. 빈배열인 경우 항상 false를 리턴하도록 되어있다.
뒤썰
표현을 한 번 바꾸어 보자.
모든 수는 양수인가? = 음수가 존재하지 않는가?
모는 수는 음수인가? = 양수가 존재하지 않는가?
모든 수가 양수이다. | 모든 수가 음수이다. (양수가 존재 않지 않는가?) | |
1 | false | false |
2 | false | true |
3 | true | false |
4 | true | true |
위처럼 some을 이용하여, 진리표를 만들어 볼 수 있을 것이다.
4번의 케이스가 아래처럼 명확하게 표현 가능 한 것도 볼 수 있을 것이다.
console.log( ![].some(v => v >= 0) ) // true
console.log( ![].some(v => v < 0) ) // true
댓글
댓글 쓰기