Testes de expressão e operadores

Last updated:
Para expandir a lógica e a funcionalidade dos seus modelos, o HubL aceita vários operadores-chave e testes de expressão. Os operadores permitem executar funções matemáticas, fazer comparações, complicar a lógica do modelo e alterar a renderização da marcação. Além disso, este artigo contém uma lista abrangente de testes de expressão que podem ser usados no HubL.

Operadores

Os operadores são símbolos que dizem ao compilador HubL para executar várias operações que resultam na saída de marcação final. A seção a seguir inclui uma lista de todos os operadores de HubL permitidos.

Matemática

Os operadores matemáticos padrão podem ser usados para calcular valores no contexto de um modelo.

Símbolo Descrição
+ Adiciona dois objetos juntos. Isso geralmente é usado para a adição de números. Se você estiver tentando concatenar strings de listas, use ~.
- Subtrai um número de outro.
- Divide números
% Retorna o restante da divisão de números
// Divida dois números e retorne o resultado inteiro truncado. Exemplo: {{ 20 // 7 }} é 2
* Multiplica números
** Eleve o operando esquerdo ao poder do operando direito
{% set my_num = 11 %} {% set my_number = 2 %} {{ my_num + my_number }}<br/> <!-- 11 + 2 = 13 --> {{ my_num - my_number }}<br/> <!-- 11 - 2 = 9 --> {{ my_num / my_number }}<br/> <!-- 11 / 2 = 5.5 --> {{ my_num % my_number }}<br/> <!-- 11 % 2 = 1 --> {{ my_num // my_number }}<br/> <!-- 11 // 2 = 5 --> {{ my_num * my_number }}<br/> <!-- 11 * 2 = 22 --> {{ my_num ** my_number }}<br/> <!-- 11 ** 2 = 121 -->13 9 5.5 1 5 22 121

Comparação

Os operadores de comparação podem ser usados para avaliar os valores da lógica do modelo. Você pode ver alguns exemplos de operadores de comparação sendo usados em declarações if aqui

Símbolo encurtado Descrição
== eq Igual a Avalia como verdadeiro sedois objetos são iguais. 
!= ne Não é igual a. Avalia como verdadeiro se dois objetos não forem iguais.
> gt Maior que Avalia como verdadeiro se o lado esquerdo for maior que o lado direito.
>= gte Maior ou igual a Avalia como verdadeiro se o lado esquerdo for maior ou igual ao lado direito.
< lt Menor que Avalia como verdadeiro se o lado esquerdo for inferior ao lado direito.
<= lte Menor ou igual a Avalia como verdadeiro se o lado esquerdo for inferior ou igual ao lado direito.

A versão abreviada dos operadores de comparação é utilizável em filtros que envolvem o teste de uma expressão como  |selectattr().

{% set my_num = 11 %} {% set my_number = 2 %} {{ my_num == my_number }}<br/> <!-- false --> {{ my_num != my_number }}<br/> <!-- true --> {{ my_num > my_number }}<br/> <!-- true --> {{ my_num >= my_number }}<br/> <!-- true --> {{ my_num < my_number }}<br/> <!-- false --> {{ my_num <= my_number }}<br/> <!-- false -->false true true true false false

Lógico

Os operadores lógicos permitem combinar várias expressões em instruções únicas.

Símbolo Descrição
e Retorna verdadeiro se o operando direito e esquerdo forem verdadeiros.
ou Retorna verdadeiro se o operando esquerdo ou direito for verdadeiro.
não Nega uma declaração e é usado em conjunto com é. Veja os exemplos abaixo.
(expr) Agrupa uma expressão para a ordem de operações. Por exemplo, (10 - 2) * variável.
?: operador ternário aceita 3 argumentos (expressão, condição verdadeira, condição falsa). Avalia uma expressão e retorna a condição correspondente.

Outros operadores do HubL

Veja abaixo outros operadores do HubL importantes que podem ser usados para executar várias tarefas.

Símbolo Descrição
no Verifica se um valor está em uma sequência.
está Executa um  teste de expressão.
| Aplica um filtro.
~ Concatena valores.

Testes de expressão

Os testes de expressão são várias condições booleanas que podem ser avaliadas por operadores lógicos.

booleano

O teste de expressão booleana verifica se o objeto é booleano (em um sentido estrito, não em sua capacidade de avaliar para uma expressão verdadeira).

{% set isActive = false %} {% if isActive is boolean %} isActive is a boolean {% endif %}isActive is a boolean

containing

O teste de expressão containing verifica se uma variável de lista tem um valor nela.

{% set numbers = [1, 2, 3] %} {% if numbers is containing 2 %} Set contains 2! {% endif %}Set contains 2!

containingall

O teste de expressão containingall verifica se uma variável de lista contém todos os valores de outra lista.

{% set numbers = [1, 2, 3] %} {% if numbers is containingall [2, 3] %} Set contains 2 and 3! {% endif %} {% if numbers is containingall [2, 4] %} Set contains 2 and 4! {% endif %}Set contains 2 and 3!

defined

O teste de expressão defined definida verifica se uma variável é definida dentro do contexto do modelo. Embora você possa usar esse teste de expressão, escrever uma instrução if sem operador será o padrão para verificar se a variável está definida ou não.

No exemplo abaixo, o parâmetro de cor de um módulo de cor é testado. Se o parâmetro de cor não contiver um valor, o modelo renderizará uma cor de fundo preta padrão. Se for definido, ele renderizará a cor de fundo definida pelo usuário.

{% color "my_color" color="#930101", export_to_template_context=True %} <style> {% if widget_data.my_color.color is defined %} body{ background: {{ widget_data.my_color.color }}; } {% else %} body{ background: #000; } {% endif %} </style><style> body{ background: #930101; } </style>

divisibleby

O teste de expressão teste divisibleby pode ser usado para testar se um objeto é divisível por outro número.

Por exemplo, abaixo, é criado um loop for que itera através de uma lista de tipos de animais. Cada tipo de animal é impresso em uma div, e cada 5ª div tem um estilo em linha diferente aplicado (largura:100%). Esse conceito pode ser aplicado a um blog em que uma marcação diferente é renderizada para um determinado padrão de posts. Para saber mais sobre loops e loop.index, confira este artigo

{% set animals = ["lions", "tigers", "bears", "dogs", "sharks"] %} {% for animal in animals %} {% if loop.index is divisibleby 5 %} <div style="width:100%">{{animal}}</div> {% else %} <div style="width:25%">{{animal}}</div> {% endif %} {% endfor %}<div style="width:25%">lions</div> <div style="width:25%">tigers</div> <div style="width:25%">bears</div> <div style="width:25%">dogs</div> <div style="width:100%">sharks</div>

equalto

O teste de expressão equalto verifica se o valor de uma variável é igual a uma constante ou outra variável. Você também pode usar o operador == para fazer o mesmo teste.

No exemplo abaixo, a largura dos posts do blog é ajustada com base no número total de postagens no loop. O exemplo de saída pressupõe que havia 4 posts no blog. 

{% for content in contents %} {% if loop.length is equalto 2 %} <div style="width:50%;">Post content</div> {% elif loop.length is equalto 3 %} <div style="width:33.333332%;">Post content</div> {% elif loop.length is equalto 4 %} <div style="width:25%;">Post content</div> {% else %} <div style="width:100%;>Post content</div> {% endif %} {% endfor %}<div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div> <div style="width:25%;">Post content</div>

even

O teste de expressão even verifica se uma variável numérica é um número par. 

O exemplo abaixo mostra um loop de listagem de blog simplificado, em que, se a iteração atual do loop for par, uma classe de post par será atribuída ao div do item do post. Caso contrário, uma classe de post ímpar é atribuída. 

{% for content in contents %} {% if loop.index is even %} <div class="post-item even-post">Post content</div> {% else %} <div class="post-item odd-post">Post content</div> {% endif %} {% endfor %} <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div> <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div>

float

O teste de expressão float verifica se uma variável numérica é um número de ponto flutuante. 

{% set quantity = 1.20 %} {% if quantity is float %} quantity is a floating point number {% endif %}quantity is a floating-point number

integer

Verifica se uma variável é um número inteiro.

{% set quantity = 120 %} {% if quantity is integer %} quantity is an integer {% endif %}quantity is an integer

iterable

Verifica se uma variável é iterável e pode ser inserida em loop.

Este exemplo verifica uma variável chamada "jobs" para ver se ela pode ser iterada. Como a variável contém uma lista de trabalhos, a instrução if seria avaliada como true e o loop seria executado. Se a variável contivesse um único valor, a instrução if imprimiria esse valor com marcação diferente. Saiba mais sobre loops for

{% set jobs = ["Accountant", "Developer", "Manager", "Marketing", "Support"] %} {% if jobs is iterable %} <h3>Available positions</h3> <ul> {% for job in jobs %} <li>{{ job }}</li> {% endfor %} </ul> {% else %} <h3>Available position</h3> <div class="single-position">{{ jobs }}</div> {% endif %}<h3>Available positions</h3> <ul> <li>Accountant</li> <li>Developer</li> <li>Manager</li> <li>Marketing</li> <li>Support</li> </ul>

lower

O teste de expressão lower é avaliado como verdadeiro quando uma string está em letras minúsculas. 

O exemplo abaixo usa uma instrução unless e um filtro inferior para garantir que uma sequência de texto inserida em um módulo de texto esteja sempre em minúsculas.

{% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Lowercase", export_to_template_context=True %} {% unless widget_data.my_text.value is lower %} {{ widget_data.my_text.value|lower }} {% endunless %}some text that should be lowercase

Mapeamento

O teste de expressão mapping verifica se um objeto é ou não um dict (dicionário). 

O exemplo abaixo verifica se o objeto de contato é um dicionário, o que é verdadeiro neste caso. 

{% if contact is mapping %} This object is a dictionary. {% else %} This object is not a dictionary. {% endif %}This object is a dictionary.

NENHUM

O teste de expressãonone verifica se uma variável tem um valor nulo.

{% module "user_email" path="@hubspot/text" label="Enter user email", value="example@hubspot.com", export_to_template_context=True %} {% unless widget_data.user_email.value is none %} {{ widget_data.user_email.value }} {% endunless %}example@hubspot.com

número

O teste de expressão number verifica se o valor de uma variável é um número.

O exemplo abaixo verifica uma variável para ver se ela é ou não uma variável e, em caso afirmativo, converte-a em milhões.

{% set my_var = 40 %} {% if my_var is number %} {{ my_var * 1000000 }} {% else %} my_var is not a number. {% endif %}40000000

odd

O teste de expressãooddverifica se uma variável numérica é um número ímpar. 

Abaixo está o mesmo exemplo do teste de expressão inversa par descrito anteriormente.

{% for content in contents %} {% if loop.index is odd %} <div class="post-item odd-post">Post content</div> {% else %} <div class="post-item even-post">Post content</div> {% endif %} {% endfor %} <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div> <div class="post-item odd-post">Post content</div> <div class="post-item even-post">Post content</div>

sameas

O teste de expressão sameas verifica se duas variáveis têm o mesmo valor. 

O exemplo abaixo define duas variáveis e, em seguida, verifica se elas são ou não as mesmas.

{% set var_one = True %} {% set var_two = True %} {% if var_one is sameas var_two %} The variables values are the same. {% else %} The variables values are different. {% endif %}The variables values are the same.

sequência

O teste de expressão sequence é similar ao iterable , na medida em que verifica se uma variável é ou não uma sequência.  

O exemplo abaixo verifica se uma variável é uma sequência e, em seguida, itera através dessa sequência de gêneros musicais.

{% set genres = ["Pop", "Rock", "Disco", "Funk", "Folk", "Metal", "Jazz", "Country", "Hip-Hop", "Classical", "Soul", "Electronica" ] %} {% if genres is sequence %} <h3>Favorite genres</h3> <ul> {% for genre in genres %} <li>{{ genre }}</li> {% endfor %} </ul> {% else %} <h3>Favorite genre:</h3> <div class="single-genre">{{ genres }}</div> {% endif %}<ul> <li>Pop</li> <li>Rock</li> <li>Disco</li> <li>Funk</li> <li>Folk</li> <li>Metal</li> <li>Jazz</li> <li>Country</li> <li>Hip-Hop</li> <li>Classical</li> <li>Soul</li> <li>Electronica</li> </ul>

string

O teste expressão string verifica se o valor armazenado em uma variável é texto. 

O exemplo abaixo verifica se uma variável é ou não uma cadeia de caracteres e, em caso afirmativo, aplica um filtro de título para alterar a capitalização. 

{% set my_var = "title of section" %} {% if my_var is string %} {{ my_var|title }} {% else %} my_var is not a string {% endif %}Title Of Section

string_containing

Este teste verifica se uma string está contida dentro de outra string. Este teste de expressão é usado em conjunto com o operador "is".
{% if content.domain is string_containing ".es" %} Markup that will only render on content hosted on .es domains {% elif content.domain is string_containing ".jp" %} Markup that will only render on content hosted on .jp domains {% else %} Markup that will render on all other domains {% endif %}Markup that will render on all other domains

string_startingwith

Este teste de expressão verifica se uma string começa com uma string específica. Ela é usada em conjunto com o operador "is".

{% if content.slug is string_startingwith "es/" %} Markup that will only render on content hosted in a /es/ subdirectory {% elif content.slug is string_startingwith "jp/" %} Markup that will only render on content hosted in a /jp/ subdirectory {% else %} Markup that will render on all subdirectories {% endif %}Markup that will render on all subdirectories

truthy

O teste de expressão truthy verifica se uma expressão é avaliada como Verdadeira.

O exemplo abaixo usa um módulo de caixa de seleção booleana para exibir uma mensagem de alerta.

{% boolean "check_box" label="Show alert", value=True, export_to_template_context=True %} {% if widget_data.check_box.value is truthy %} <div class="alert">Danger!</div> {% endif %}<div class='alert'>Danger!</div>

undefined

O teste de expressão undefined verifica se uma variável está indefinida no contexto do modelo. Esse teste é diferente de none, pois undefined será verdadeiro quando a variável estiver presente, mas não tiver valor; enquanto nenhum será verdadeiro quando a variável tiver um valor nulo.  

O exemplo abaixo verifica um modelo para a existência da variável "my_var".

{% if my_var is undefined %} A variable named "my_var" does not exist on this template. {% else %} {{ my_var }} {% endif %}A variable named "my_var" does not exist on this template.

upper

O testeupper é avaliado como verdadeiro quando uma string é toda maiúscula. Veja abaixo um exemplo inverso do teste de expressão inferior acima.

{% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Uppercase", export_to_template_context=True %} {% unless widget_data.my_text.value is upper %} {{ widget_data.my_text.value|upper }} {% endunless %}SOME TEXT THAT SHOULD BE UPPERCASE

within

Os testes de expressão within verificam se uma variável está dentro de uma lista.
{% set numbers = [1, 2, 3] %} {% if 2 is within numbers %} 2 is in the list! {% endif %} {% if 4 is within numbers %} 4 is in the list! {% endif %}2 is in the list!

Este artigo foi útil?
Este formulário deve ser usado apenas para fazer comentários sobre esses artigos. Saiba como obter ajuda para usar a HubSpot..