# Boolean operations

Pulsar supports boolean operations such as `and`, `or` but the syntax is a bit different than in other languages. Instead of operators, you use [functions](https://supernova-developers.gitbook.io/supernova-dsm/pulsar-language/functions):

```
{[ if @and(var1, var2) ]}
  Executes when both var1 and var2 == true
{[/]}
```

You can also chain boolean operations, using functions inside functions:

```
{[ if @and(var1, @or(var2, var3)) ]}
  Executes when var1 == true and one of var2, var2 == true
{[/]}
```

The following boolean functions are available:

### And

`and` results to true when all statements were true. `and` is a variadic function, and it can take as many parameters as you want:

```
{[ if @and(true, true, true, true, false) ]}
  Never executes because one of the statements was false
{[/]}
```

### Or

`or` results to true when at least one of the statements is true. `or` is a variadic function, and it can take as many parameters as you want:

```
{[ if @and(false, false, false, true, false) ]}
  Executes because one of the statements was true
{[/]}
```

### Not

`not` negates the boolean value, meaning `true` becomes `false` and vice versa.

```
{[ if @not(false) ]}
  Executes because false was negated to true
{[/]}
```

{% hint style="warning" %}
Note from developers: **We are planning to add support for true operators as soon as possible, so consider this a workaround**. For more complex logic, you should opt to [use javascript helpers instead](https://supernova-developers.gitbook.io/supernova-dsm/building-exporters/creating-new-exporter/using-javascript).&#x20;

There are engine-related challenges with supporting operators that need to be solved before they can be implemented, especially about precedence controlled with brackets `(var1 && var2) || var3` , as brackets are currently exclusively used for function invocations. If you would like to work on problems like this, [consider joining our team](https://supernova.io/careers)!
{% endhint %}
