> ## Documentation Index
> Fetch the complete documentation index at: https://br.developers.hubspot.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Instruções If

> Um guia prático para as instruções if do HubL da HubSpot para programadores de CMS.

Você pode incluir lógica condicional nos seus módulos e modelos utilizando instruções [if](#basic-if-statement-syntax) e [unless](#unless-statements) do HubL. As instruções If geralmente contêm [operadores compatíveis](/cms/reference/hubl/operators-and-expression-tests) com HubL e podem ser utilizadas para executar [testes de expressão](/cms/reference/hubl/operators-and-expression-tests#expression-tests).

<Warning>
  **Observe:** se estiver utilizando [tokens de personalização](/cms/reference/hubl/functions#personalization-token) dentro de uma instrução condicional do seu módulo de e-mail, você terá que [ativar o e-mail programável para o módulo](/cms/start-building/features/data-driven-content/emails-with-programmable-content).

  As informações transmitidas por meio das APIs [v3](/api-reference/marketing-marketing-emails-v3/guide) ou [v4](/api-reference/marketing-single-send-v4/guide) de envio único não funcionarão nas instruções `if`, uma vez que os modelos são compilados antes de as informações serem preenchidas.
</Warning>

## Sintaxe básica da instrução if

O HubL utiliza instruções if para ajudar a definir a lógica de um modelo. A sintaxe das instruções if do HubL é muito semelhante à lógica condicional em Python. As instruções `if` são envolvidas por [delimitadores](/cms/reference/hubl/variables-macros-syntax), começando com uma instrução `if` de abertura e terminando com uma instrução `endif`.

O exemplo abaixo fornece a sintaxe básica de uma instrução if, em que a "condição" seria substituída pela regra booleana que você avaliaria como verdadeira ou falsa.

```hubl theme={null}
{% if condition %}
	If the condition is true print this to template.
{% endif %}
```

Agora que você já viu a sintaxe básica, vamos analisar alguns exemplos reais de instruções if básicas. Os exemplos abaixo mostram instruções if que verificam se um módulo HubL com o nome `my_module` e se uma variável com o nome `my_module` estão presentes em um modelo. Observe que, sem operadores, a instrução if avalia se o módulo está ou não definido no contexto do modelo.

```hubl theme={null}
{% module "my_module" path="@hubspot/rich_text", label="My rich text module", html="Default module text" export_to_template_context=true %}

{% if widget_data.my_module %}
	A module named "my_module" is defined in this template.
{% endif %}

{% set my_variable = "A string value for my variable" %}
{% if my_variable %}
	The variable named my_variable is defined in this template.
{% endif %}
```

Repare que, ao avaliar o módulo HubL, o nome do módulo é deixado entre aspas dentro da instrução `if` e, ao testar a variável, não são utilizadas aspas no nome da variável. Em ambos os exemplos acima, o módulo e a variável existem no modelo; portanto, as instruções são avaliadas para imprimir a marcação. Observe que estes exemplos estão apenas testando se o módulo e a variável estão definidos, e não se eles contêm um valor.

Vejamos agora uma instrução `if` que avalia se um módulo tem um valor, em vez de avaliar se ele existe no modelo. Para fazer isso, é necessário utilizar o parâmetro [export\_to\_template\_context](/cms/reference/modules/export-to-template-context). No exemplo abaixo, se o módulo de rich text contivesse um valor no editor de conteúdo, a marcação seria impressa. Se o campo de texto do módulo de rich text fosse desativado, nenhuma marcação seria exibida. Se estiver trabalhando com módulos personalizados, existe uma sintaxe simplificada, `widget.widget_name`, descrita [neste exemplo](/cms/reference/modules/configuration).

<CodeGroup>
  ```text input.txt theme={null}
  {% module "product_names" path="@hubspot/text", label="Enter the product names that you would like to render the coupon ad for", value="all of our products", export_to_template_context=True %}

  {% if widget_data.product_names.value %}
  <div class="coupon-ad">
  <h3>For a limited time, get 50% off {{ widget_data.product_names.value}}! </h3>
  </div>
  {% endif %}
  ```

  ```text output.txt theme={null}
  <div class="coupon-ad">
  <h3>For a limited time get 50% off all of our products!</h3>
  </div>
  ```
</CodeGroup>

## Usar elif e else

As instruções `if` podem ser sofisticadas com instruções condicionais adicionais ou com uma regra que é executada quando a condição ou condições são falsas. A instrução `elif` permite adicionar condições à sua lógica que serão avaliadas depois da condição anterior. A instrução **`else`** define uma regra que é executada quando todas as outras condições são falsas. Você pode ter um número ilimitado de instruções `elif` dentro de uma instrução if, mas apenas uma instrução `else` .

Veja abaixo um exemplo de sintaxe básica da instrução if que usa o operador [\<=](/cms/reference/hubl/operators-and-expression-tests#comparison) para verificar o valor de uma variável. Neste exemplo, o modelo imprimiria: "A variável chamada number é menor ou igual a 6."

```hubl theme={null}
{% set number = 5 %}

{% if number <= 2 %}
	Variable named number is less than or equal to 2.
{% elif number <= 4 %}
	Variable named number is less than or equal to 4.
{% elif number <= 6 %}
	Variable named number is less than or equal to 6.
{% else %}
	Variable named number is greater than 6.
{% endif %}
```

Veja abaixo mais um exemplo que utiliza um módulo de escolha para mostrar diferentes cabeçalhos em uma página de carreiras, com base no departamento escolhido pelo usuário. O exemplo utiliza o operador [==](/cms/reference/hubl/operators-and-expression-tests#comparison), para verificar a existência de certos valores predefinidos no módulo de escolha.

```hubl theme={null}
{% choice "department" label="Choose department", value="Marketing", choices="Marketing, Sales, Dev, Services" export_to_template_context=True %}

{% if widget_data.department.value == "Marketing" %}

<h3>Want to join our amazing Marketing team?!</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% elif widget_data.department.value == "Sales" %}

<h3>Are you a Sales superstar?</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% elif widget_data.department.value == "Dev" %}

<h3>Do you love to ship code?</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% else %}

<h3>Want to work with our awesome customers?</h3>
<h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4>

{% endif %}
```

## Instruções Unless

As instruções `unless` são condicionais, assim como as instruções `if`, mas funcionam com a lógica inversa. Elas processam e compilam o código entre as tags de abertura e fechamento, a menos que a condição booleana única seja avaliada como verdadeira. As instruções unless começam com\*\*`unless`\*\* e terminam com **`endunless`. As instruções** `unless` dão suporte a `else` mas não a `elif`.

Veja abaixo um exemplo que imprime um cabeçalho "Em construção", a menos que o campo de rich text tenha um valor. Se o campo de rich text tiver conteúdo, esse conteúdo será mostrado.

```hubl theme={null}
{% module "my_page_content" path="@hubspot/rich_text", label="Enter your page content", html="" export_to_template_context=true %}

{{ widget_data.my_page_content.html }}

{% unless widget_data.my_page_content.html %}
<h1>This page is under construction.</h1>
<h3>Come back soon!</h3>
{% endunless %}
```

## ifchanged

Além das instruções if e unless, o HubL dá suporte a instruções `ifchanged` . Estas instruções podem ser utilizadas para mostrar apenas a marcação quando uma variável tiver sido alterada desde uma invocação anterior desta tag.

## Instruções if em linha

O HubL dá suporte a instruções `if` em linha. Estas podem ser utilizadas para escrever lógica condicional de forma concisa com [operadores e testes de expressão](/cms/reference/hubl/operators-and-expression-tests).

```hubl theme={null}
{% set color = "Blue" if is_blue is truthy else "Red" %}     // color == "blue"

{{ "Blue" if is_blue is truthy else "Red" }}     // "Blue"

{% set dl = true %}
<a href="http://example.com/some.pdf" {{"download" if dl }} >Download PDF</a>
```

## Operadores ternários

Também é possível utilizar operadores ternários para escrever rapidamente lógica condicional com [operadores e testes de expressão](/cms/reference/hubl/operators-and-expression-tests#logical).

```hubl theme={null}
// If the variable is_blue is true, output "blue", otherwise output"red"
{{ is_blue is truthy ? "blue" : "red" }}

// Set the variable is_red to false if is_blue is true, otherwise set to true
{% set is_red = is_blue is truthy ? false : true %}
```
