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

  • resizeImage 연산자는 원본 이미지를 새로운 크기로 조정합니다. 일반 이미지를 적절한 크기로 재조정할 때 사용하는 썸네일 함수입니다. resizeImage 연산자 함수 설명 image…
  • 논리 연산자는 불리언(boolean) 값을 비교하는 데 사용됩니다. 논리 연산자 예 설명 a && b a와 b 모두 true 일 때 …
  • 연결 연산자는 문자열을 동일한 유형 또는 다른 유형의 값에 연결합니다. 구문 구문 1 string + allType 결과는 string 유형의 값입니다. 구문 2 allType + string 결과는 string 유형의 값입니다. + 기호는 문자열과 다른 …
  • 데이터 타입은 HTML 편집 페이지에서 자주 볼 수 있습니다. 블로거 테마의 디자인을 수정해서 사용하려는 사람들에게는 이 데이터 타입은 중요합니다. 예를 들어 문자열(string)과 정수(integer)의 차이점이라든지, 불리언(boolean)이나 객체(object), 배열(array)이 무엇인지는 알아야…
  • Contains 연산자는 문자열의 섹션을 문자열과 비교하는 연산자입니다. 결과는 불리언 값을 반환합니다. 구문 구문 string contains string 연산 결과는 항상 불리언 값입니다. 두 피연산자는 2개의 문자열이어야 합니다. …
  • 범위 연산자는 배열의 출력 결과를 제어합니다 범위 연산자 연산자 설명 예 limit 출력 제한 연산자 array limit number …

Post a Comment