블로그스팟 다중 조건문 단순화하기

최종 수정일:

b:if 태그를 사용할 때 여러 조건을 적용해야 할 경우가 있습니다. 이를테면 'A 또는 B 또는 C라면?' 같은 경우입니다. 보통은 or이나 and를 사용하면 해결되는 문제이지만 A, B, C에 들어가는 조건에 중복이 많다면 코드가 길어집니다. 이러한 코드를 단순화하는 방법을 알아봅시다.

b:if 태그란?

b:if 태그는 블로그스팟 테마에서 사용하는 조건문 코드입니다. 여느 프로그래밍 언어에서 볼 수 있는 if문이라 생각하시면 됩니다. XML 형태를 띠고 있어 HTML 태그와 모습은 비슷해 보입니다.

b:if 태그의 구조입니다. HTML과 비슷하게 여는 태그와 닫는 태그가 모두 있어야 합니다. cond 안의 표현식(expression)이 true면 b:if 안의 내용을 실행하고, false라면 실행하지 않습니다.

<b:if cond='CONDITION'>

</b:if>

문제 상황

b:if 태그로 조건문을 만드려고 합니다. 제목이 "A" 혹은 "B"인 게시물을 필터링하려고 가정합시다. 먼저 아래와 같이 코드를 작성할 수 있습니다.

<b:if cond='data:post.title == "A" or data:post.title == "B"'>

</b:if>

위와 같이 조건문의 개수가 적은 경우에는 별 문제가 되지 않습니다. 만약 조건문의 개수가 늘어난다면 어떻게 될까요?

<b:if cond='data:post.title == "A" or data:post.title == "B" or data:post.title == "C" or data:post.title == "D"'>

</b:if>

조건문의 개수가 조금만 늘어나면 코드의 가독성을 해치게 됩니다.

해결법

이럴 때는 배열(Array)을 이용하는 것이 좋습니다.

<b:if cond='data:post.title in ["A", "B", "C", "D"]'>

</b:if>

in을 사용하여 코드를 간단하게 한 예제입니다. in은 주어진 배열 속에 해당 문자열 또는 숫자가 있는지 검증하여 true 혹은 false를 반환합니다.

in의 또 다른 사용 예제입니다. 제가 테마를 만들 때 라벨 표시 가젯에서 특정 라벨들만 제외하고 표시하고 싶을 때에 작성한 코드입니다. 이 가젯에서는 A, B, C, D, E 라벨을 제외한 나머지 라벨만 표시합니다.

<b:loop var='label' values='data:labels where (l => l.name not in ["A", "B", "C", "D", "E"])' index='idx'>

</b:loop>