Blogger - 08 Ramda 연산자

Blogger 람다 연산자 - any, all, none, where, filter, first, map 및 람다식의 중첩.
5 min read

람다는 괄호와 화살표를 이용해 표현합니다.블로거는 람다 형식의 연산자를 지원합니다.

Ramda 연산자

블로거에서 람다 표현식의 작동 방식을 보다 잘 이해하려면 데이터에 대한 지식과 다른 연산자에 대한 지식이 필요할지 모릅니다. 블로거에서 사용되는 람다식은 개별 인스턴스가 아닌 전체 데이터(라벨, 게시물, 주석 등)에 사용할 수 있는 중첩 연산자입니다.

형식은 다음과 같습니다.

operator (variable => expression)

variable는 변수 이름을 지정하는 것으로 임의의 문자열이 올 수 있으며, operator에는 다음 연산자들을 사용할 수 있습니다.

연산자 설명
any 주어진 조건이 하나라도 일치하면 출력
예: array any (var => boolean)
all 주어진 조건이 모두 일치하면 출력
예: array all (var => boolean)
none 주어진 조건이 하나라도 일치하면 출력되지 않음.(ANY 와 반대되는 기능입니다.)
예: array none (var => boolean)
where 주어진 조건과 일치하는 항목을 반환
예: array where (var => boolean)
filter where와 동일
예: array filter (var => boolean)
first 주어진 조건과 일치하는 첫 번째 항목을 반환
예: array first (var => boolean)
map 각 결과에 새로운 집합을 결합한 항목을 반환
예: array map (var => operand)
count 일치하는 항목의 수를 숫자로 반환
예: array count (var => boolean)

연산자들의 형식은 아래 예제와 함께 살펴보겠습니다.

예제

[WHERE], [FILTER], [FIRST]

[where]를 사용하여 게시물 목록 중에서 '블로그' 단어와 일치하는 제목만 출력하는 코드입니다. [where] 대신 [filter]를 사용해도 됩니다.

<b:loop values='data:posts where (lb => lb.title contains "블로그")' var='item'>
  <h1><data:item.title/></h1>
</b:loop>
<!--
결과:
구글 블로그 장점과 단점
네이버 블로그 장점과 단점
티스토리 블로그 장점과 단점
...
-->

[first]를 사용하여 '블로그' 단어와 일치하는 제목에서 첫 번째 게시물만 출력합니다.

<b:loop values='data:posts first (post => post.title contains "블로그")' var='item'>
  <h1><data:item.title/></h1>
</b:loop>
<!--
결과:
구글 블로그 장점과 단점
-->

[ANY], [ALL], [NONE]

[any]를 사용하여 게시물에 라벨(label) 이름 중 'apple', 또는 'banana'를 하나라도 포함하고 있으면 결과를 출력합니다.

<b:with value='["apple", "banana"]' var='labelsList'>
  <b:if cond='data:post.labels any (lb => lb.name in data:labelsList)'>
    <h1>hello</h1>
  </b:if>
</b:with>

[all]은 주어진 라벨의 개수와 이름이 모두 일치해야 출력됩니다. 두개의 라벨이 이외에 또다른 라벨이 있으면 불일치로 출력되지 않습니다.

<b:with value='["apple", "banana"]' var='labelsList'>
  <b:if cond='data:post.labels all (lb => lb.name in data:labelsList)'>
    <h1>hello</h1>
  </b:if>
</b:with>

[none]은 [any]와 반대 기능입니다. any는 하나라도 일치하면 출력하지만 none은 하나라도 일치하면 출력하지 않습니다. 다시말해 'apple', 'banana'를 포함하지 않으면 출력합니다. 모두 불일치해야 출력됩니다.

<b:with value='["apple", "banana"]' var='labelsList'>
  <b:if cond='data:post.labels none (lb => lb.name in data:labelsList)'>
    <h1>hello</h1>
  </b:if>
</b:with>

[map]

아래 예는 게시물의 제목 끝에 'hello' 단어를 붙여서 새로운 제목을 만들어 반환받습니다.

<b:loop values='data:posts map (lb => lb.title + " hello")' var='item'>
  <h1><data:item/></h1>
</b:loop>
<!--
결과:
구글 블로그 장점과 단점 hello
네이버 블로그 장점과 단점 hello
티스토리 블로그 장점과 단점 hello
...
-->

[where]는 일치하는 항목을 직접 반환하지만 [map]으로 대체하면 결과를 true, false로 값으로 받을 수 있습니다.

다음은 찾는 단어와 일치하면 true, 아니면 false를 반환 받는 예제입니다.

<b:loop values='data:posts map (lb => lb.title contains "단어")' var='item'>
  <h1><data:item/></h1>
</b:loop>
<!--
결과:
false
true
true
true
...
-->

[count]

[count]는 일치하는 결과 값을 숫자로 반환 받습니다. 예를 들어 게시물 제목에 '블로그' 단어를 포함하는 게시물의 수를 숫자로 반환 받습니다. 2개의 게시물을 찾았다면 숫자 2를 반환 받습니다.

<b:with value='data:posts count (lb => lb.title contains "블로그")' var='item'>
  <h1><data:item/></h1>
</b:with>
<!--
결과:
2
-->

람다식의 중첩

중첩을 사용하려면 간단한 규칙이 필요합니다. 람다 안에 중첩을 시킬 때는 [any], [all], [none] 중 하나를 사용합니다. 예를 들어 게시물이 가지고 있는 라벨을 필터링하여 게시물 제목을 표시하려면 다음과 같이 작성합니다.

<b:loop values='data:posts where (lb1 => lb1.labels any (lb2 => lb2.name == "blogger"))' var='p'>
  <data:p.title/>
</b:loop>

위 경우는 게시물 목록에서 라벨 이름과 일치하는 모든 게시물을 출력합니다.

You may like these posts

  • data 속성은 하위 노드에서 전달할 데이터 세트를 정의할 수 있는 Blogger 표현식 속성입니다. 기본형 data='alias' data 속성은 별칭 또는 별칭 개체를 포함하는 표현식 속성입니다. 이 속성은 Blogger 태그에 포함되어 하위 노드에서 전달할 데이터 세트를 정의합니다. …
  • cond 속성은 실행 조건을 정의할 수 있는 Blogger 표현식 속성입니다. 기본형 cond='expression' cond 속성은 출력될 값이 BOOLEAN 유형인 표현식 속성입니다. 이 속성은 Blogger 태그에 포함되어 실행 조건을 정의합니다. …
  • 논리 연산자는 불리언(boolean) 값을 비교하는 데 사용됩니다. 논리 연산자 예 설명 a && b a와 b 모두 true 일 때 …
  • expr:는 속성의 접두사이며 속성 값에 Blogger 표현식이 포함되어 있음을 나타냅니다. Blogger 표현식이란? Blogger 표현식은 HTML 태그의 속성 값에 삽입되는 Blogger의 특정 코드입니다. <TAG ATTRIBUTE='EXPRESSION'> </TAG&g…
  • 범위 연산자는 배열의 출력 결과를 제어합니다 범위 연산자 연산자 설명 예 limit 출력 제한 연산자 array limit number …
  • 각 Blogger 테마에는 <html> 태그에 정의된 속성이 있으며 이 속성을 통해 대시보드 및 XML 파일의 동작을 수정할 수 있습니다 HTML 태그는 어디에 있나요? <html> 태그는 문서 상단에 위치하며 HTML 문서임을 브라우저에 알립니…

Post a Comment