Membership 연산자는 값이 시퀀스의 멤버인지 확인하는데 사용됩니다. 연산 결과는 항상 Boolean 값을 반환합니다.

예 제 설 명 Ex.
in 배열에서 a 를 발견하는지 a in Array
contains 배열에서 a 를 포함하는지 Array contains a

비교할 피연산자는 배열, 문자열, Boolean, 숫자이어야 하며 중첩을 허용합니다. 

아래 코드는 foo 가 배열에 있으면 true 를 없으면 false 를 반환하는 코드입니다. foo 가 배열에 있으므로 true를 반환하게 됩니다.

<!-- foo 가 배열에 있는지 -->
<b:eval expr='"foo" in ["foo", "bar", "baz"]' />
<!--//
결과:
true
//-->

<!-- foo 가 배열에 없는지 -->
<b:eval expr='"foo" not in ["foo", "bar", "baz"]' />
<!--//
결과:
false
//-->

연산자 “in” 과 “contains” 는 반대의 의미를 가지고 있을 뿐 기능은 동일합니다. 예를 들어 in 은 왼쪽에서 오른쪽 방향의 자료를 검색하고, contains 는 오른쪽에서 왼쪽 방향의 자료를 검색합니다.

<b:eval expr='["foo", "bar", "baz"] contains "foo"'/>
<!--//
결과:
true
//-->

배열 foo, bar, baz 에서 foo 를 포함하고 있으므로 true 를 반환합니다. 다음은 게시물 본문에 foo 를 포함하고 있으면 “안녕 하보니!” 를 출력하는 코드입니다.

<b:if cond='data:post.body contains "foo"'>
  <h1>안녕 하보니!</h1>
</b:if>

아래 코드는 검색 라벨이 foo, baz 이면 “안녕 하보니” 를 반환하고, 아니면 “안녕 블로거” 를 반환하는 코드입니다.

<b:eval expr='data:view.search.label in ["foo", "bar"] ? "안녕 하보니" : "안녕 블로거"'/>

위 코드는 삼항 연산자라 부릅니다. 형식은 <조건식> ? true : false 입니다. 주어진 조건식이 참이면 true 를, 아니면 false 를 반환합니다.

다음은 중첩을 사용한 예입니다. 현재 페이지의 게시물 수가 7개 또는 20개 또는 50개의 게시물이 있고, 게시물 목록이면 true 를 반환합니다.

<b:eval expr='data:posts.size in [7, 20, 50] and data:view.isMultipleItems'/>

0 댓글