blogger
blogger - Ramda 연산자
블로거는 람다 형식의 연산자를 지원합니다. 람다는 다른 언어와 마찬가지로 괄호와 화살표를 이용해 표현합니다. 블로거에서 람다 표현식의 작동 방식을 보다 잘 이해하려면 데이터에 대한 지식과 다른 연산자에 대한 지식이 필요할지 모릅니다.
블로거에서 사용되는 람다식은 개별 인스턴스가 아닌 전체 데이터 세트(라벨, 게시물, 주석 등)에 사용할 수 있는 중첩 연산자입니다. 형식은 다음 예와 같습니다.
variable 는 변수 이름을 지정하는 것으로 임의의 문자열이 올 수 있습니다. <operator>에는 다음 연산자 중 하나가 됩니다.
[WHERE], [FILTER], [FIRST] 형식은 다음 예와 같이 사용합니다.
위 코드는 <where>를 사용했으므로 게시물 목록 중에서 “하보니” 단어와 일치하는 제목만 출력하는 코드입니다. 다음 사례는 <first>를 사용했기 때문에 한 개 이상 게시물이 일치하더라도 첫 번째 게시물만 출력합니다.
다음은 [ANY], [ALL], [NONE] 에 대한 예제입니다.
위 결과는 게시물에 라벨 이름 “하보니”, 또는 “PHP” 중 하나라도 포함하고 있으면 출력하는 코드입니다.
게시물에 두 개의 라벨만 포함하고 있는 게시물이면 출력합니다. 단, 주어진 두 개의 라벨과 모두 일치하더라도 이외의 라벨을 포함하고 있는 게시물이면 불일치입니다. 다시 말해 [ALL]이란 주어진 라벨의 개수와 이름이 모두 일치해야 합니다.
이제 [NONE] 에 대해 알아보도록 하죠. NONE 은 ANY 의 반대기능입니다. ANY 는 하나라도 일치하면 출력하지만 NONE 은 하나라도 일치하면 출력하지 않습니다.
위 예제는 "하보니”, "PHP” 라벨을 포함하지 않으면 출력합니다. 다시 말해 모두 불일치해야 출력됩니다.
[MAP] 의 뜻을 전달하려니 조금 어렵네요. 일단 해설은 각 결과에 새로운 집합을 추가한 데이터를 반환합니다. + 연산자를 사용하면 새로운 문자열을 만들고 단순히 map 만 사용하면 boolean 으로 반환 받을 수 있습니다.
아래 예는 게시물의 제목 끝에 "PHP” 단어를 붙여서 새로운 제목을 만들어 반환 받습니다.
다음은 찾는 단어와 일치하면 true, 아니면 false를 반환 받을 수 있습니다. where 대신 map 으로 대체한 결과입니다.
다음은 [COUNT]에 대한 예입니다. 주어진 단어와 일치하는 게시물의 수를 반환합니다.
게시물 제목에 “사용자” 단어를 포함하는 게시물의 수를 숫자로 반환 받습니다. 예를 들어 2개의 게시물을 찾으면 숫자 2를 반환 받습니다.
람다식은 중첩을 사용할 수 있습니다. 중첩을 사용하려면 간단한 규칙이 필요합니다. 첫 번째 람다식은 위 표에 설명된 람다를 그대로 사용할 수 있지만 람다 안에 중첩을 시킬 때는 any, all, none 중 하나를 사용합니다. 예를 들어 게시물이 가지고 있는 라벨을 필터링하여 게시물 제목을 표시하려면 다음과 같이 작성합니다.
위 경우는 게시물 목록에서 “하보니” 라벨 이름과 일치하는 모든 게시물을 출력합니다.
블로거에서 사용되는 람다식은 개별 인스턴스가 아닌 전체 데이터 세트(라벨, 게시물, 주석 등)에 사용할 수 있는 중첩 연산자입니다. 형식은 다음 예와 같습니다.
operator (variable => expression)
variable 는 변수 이름을 지정하는 것으로 임의의 문자열이 올 수 있습니다. <operator>에는 다음 연산자 중 하나가 됩니다.
연산자 | 설 명 |
---|---|
any | 주어진 조건이 하나라도 일치하면 출력 Ex.) array any (var => boolean) |
all | 주어진 조건이 모두 일치하면 출력 Ex.) array all (var => boolean) |
none | 주어진 조건이 하나라도 일치하면 출력되지 않음
(ANY 와 반대되는 기능입니다.) Ex.) array none (var => boolean) |
where | 주어진 조건과 일치하는 항목을 반환 Ex.) array where (var => boolean) |
filter | where 와 동일 Ex.) array filter (var => boolean) |
first | 주어진 조건과 일치하는 첫 번째 항목을 반환 Ex.) array first (var => boolean) |
map | 각 결과에 새로운 집합을 결합한 항목을 반환 Ex.) array map (var => operand) |
count | 일치하는 항목의 수를 숫자로 반환
Ex.) array count (var => boolean) |
[WHERE], [FILTER], [FIRST] 형식은 다음 예와 같이 사용합니다.
<b:loop values='data:posts where (foo => foo.title contains "하보니")' var='item'>
<h1><data:item.title/></h1>
</b:loop>
<!--//
결과:
하보니 PHP
당신에게 말하는 사람은 하보니입니다.
이곳은 하보니 공간
…
//-->
위 코드는 <where>를 사용했으므로 게시물 목록 중에서 “하보니” 단어와 일치하는 제목만 출력하는 코드입니다. 다음 사례는 <first>를 사용했기 때문에 한 개 이상 게시물이 일치하더라도 첫 번째 게시물만 출력합니다.
<b:loop values='data:posts first (foo => foo.title contains "하보니")' var='item'>
<h1><data:item.title/></h1>
</b:loop>
<!--//
결과:
하보니 PHP
//-->
다음은 [ANY], [ALL], [NONE] 에 대한 예제입니다.
<b:with value='["하보니", "PHP"]' var='labelsList'>
<b:if cond='data:post.labels any (foo => foo.name in data:labelsList)'>
<h1>안녕 하보니</h1>
</b:if>
</b:with>
위 결과는 게시물에 라벨 이름 “하보니”, 또는 “PHP” 중 하나라도 포함하고 있으면 출력하는 코드입니다.
<b:with value='["하보니", "PHP"]' var='labelsList'>
<b:if cond='data:post.labels all (foo => foo.name in data:labelsList)'>
<h1>안녕 하보니</h1>
</b:if>
</b:with>
게시물에 두 개의 라벨만 포함하고 있는 게시물이면 출력합니다. 단, 주어진 두 개의 라벨과 모두 일치하더라도 이외의 라벨을 포함하고 있는 게시물이면 불일치입니다. 다시 말해 [ALL]이란 주어진 라벨의 개수와 이름이 모두 일치해야 합니다.
이제 [NONE] 에 대해 알아보도록 하죠. NONE 은 ANY 의 반대기능입니다. ANY 는 하나라도 일치하면 출력하지만 NONE 은 하나라도 일치하면 출력하지 않습니다.
<b:with value='["하보니", "PHP"]' var='labelsList'>
<b:if cond='data:post.labels none (foo => foo.name in data:labelsList)'>
<h1>안녕 하보니</h1>
</b:if>
</b:with>
위 예제는 "하보니”, "PHP” 라벨을 포함하지 않으면 출력합니다. 다시 말해 모두 불일치해야 출력됩니다.
[MAP] 의 뜻을 전달하려니 조금 어렵네요. 일단 해설은 각 결과에 새로운 집합을 추가한 데이터를 반환합니다. + 연산자를 사용하면 새로운 문자열을 만들고 단순히 map 만 사용하면 boolean 으로 반환 받을 수 있습니다.
아래 예는 게시물의 제목 끝에 "PHP” 단어를 붙여서 새로운 제목을 만들어 반환 받습니다.
<b:loop values='data:posts map (foo => foo.title + " PHP")' var='item'>
<h1><data:item/></h1>
</b:loop>
<!--//
결과:
안녕 하보니 PHP
하보니 반가워 PHP
또 만나요 PHP
//-->
다음은 찾는 단어와 일치하면 true, 아니면 false를 반환 받을 수 있습니다. where 대신 map 으로 대체한 결과입니다.
<b:loop values='data:posts map (foo => foo.title contains "하보니")' var='item'>
<h1><data:item/></h1>
</b:loop>
<!--//
결과:
false
true
true
true
…
//-->
다음은 [COUNT]에 대한 예입니다. 주어진 단어와 일치하는 게시물의 수를 반환합니다.
게시물 제목에 “사용자” 단어를 포함하는 게시물의 수를 숫자로 반환 받습니다. 예를 들어 2개의 게시물을 찾으면 숫자 2를 반환 받습니다.
<b:with value='data:posts count (foo => foo.title contains "사용자")' var='item'>
<h1><data:item/></h1>
</b:with>
람다식은 중첩을 사용할 수 있습니다. 중첩을 사용하려면 간단한 규칙이 필요합니다. 첫 번째 람다식은 위 표에 설명된 람다를 그대로 사용할 수 있지만 람다 안에 중첩을 시킬 때는 any, all, none 중 하나를 사용합니다. 예를 들어 게시물이 가지고 있는 라벨을 필터링하여 게시물 제목을 표시하려면 다음과 같이 작성합니다.
<b:loop values='data:posts where (foo => foo.labels any (bar => bar.name == "하보니"))' var='p'>
<data:p.title/>
</b:loop>
위 경우는 게시물 목록에서 “하보니” 라벨 이름과 일치하는 모든 게시물을 출력합니다.
0 댓글