# If / Else If / Else

The `if` flow evaluates the given expression and executes the body if the expression resulted in `true`. Otherwise, the body is ignored. It can be chained with `else if` and `else`, stopping the execution after the first expression resulting in `true`.&#x20;

`If` must always start the condition chain and can be optionally followed by `else if` and `else`. `Else` has to always be the last, and can only be used in the chain.

## Syntax

Basic syntax of `if` tag is as follows:

```swift
{[ if [statement] ]}
   Content that gets executed when statement evaluates to true
{[/]}
```

When additional conditions are needed, use `else if` and / or `else` to chain them:

```swift
{[ if [statement] ]}
   Content that gets executed when first statement evaluates to true
{[ elseif [statement] ]}
   Content that gets executed when first statement evaluates to false and second to true
{[ else ]}
   Content that gets executed when everything above evaluates to false (fallback)
{[/]}
```

Note that `else` doesn't have `statement` as it serves as a fallback when everything else fails.

## Evaluating the statement

> This section is a work in progress. If definition is not yet complete

`if` or `else if` evaluates to true when one of the following conditions is true:

* `statement` resulting type is `Boolean` and  `== true`
* `statement` resulting type is `Int` and `>= 1`
* `statement` resulting type is `String` and the string is not empty

## Example use case

`If` can be used to render structurally different data based on the input values. In this example, a different user menu gets rendered based on whether the user is admin, team member, or a visitor.

**Data**

```javascript
{
    "user": {
        "name": "Jiri",
        "type": "member"
    }
}
```

**Blueprint**

```markup
<ul>
    {[ if user.type.equals("admin") ]}
    <li>Manage Database</li>
    <li>Manage Users</li>
    <li>Manage Team</li>
    {[ elseif self.user.type.equals("member") ]}
    <li>Manage Team</li>
    {[ else ]}
    <li>Request Membership</li>
    {[/]}
    <li>Logout</li>
</ul>
```

**Result**

```markup
<ul>
    <li>Manage Team</li>
    <li>Logout</li>
</ul>
```

Finally, if we change `user.type` to `admin`, the output will look like the following:

```markup
<ul>
    <li>Manage Database</li>
    <li>Manage Users</li>
    <li>Manage Team</li>
    <li>Logout</li>
</ul>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://supernova-developers.gitbook.io/supernova-dsm/pulsar-language/flows/if-else-if-else.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
