What is the purpose of declaring a variable without assigning a value to it? For example, I'm looking at the following code in a Text/XML transformation:

```
{%
    str1;
    bool1;
    bool2 = false;

    if (str1 != "something specific" && str1 != "") {
        bool1 = false;
        bool2 = true;
    }

    str1 = SomeFieldFromDataSource;

    return "";
#%}

{% if (bool1 != false) { return "<div>"; } #%}

{% if (bool2) { return "</div><div>"; } #%}

<div>Some content...</div>

```

What are the first two variable declarations doing? Are they just setting those variables to some default value? Without declaring a type somehow, how would Kentico know what value to use (unless it uses a single default value for everything)? Or, are the first two declarations unnecessary?

I've searched the internet, but I'm not seeing much out there on variable declaration, other than it shouldn't be necessary unless you're assigning a value. However, I'm reluctant to start deleting portions of code since I'm pretty new to Kentico and transformation syntax.

**EDIT**  

To enhance my understanding of unassigned variables, I performed the following test in a transformation, with the result of each conditional expression shown in the comments to the right.

```
{% b; s; %} <!-- Evaluation of the following expressions is the same with or without this line. -->

{% if (b == true) { return "<div>b is true</div>" } #%}           <!-- false -->
{% if (b == false) { return "<div>b is false</div>" } #%}         <!-- false -->
{% if (b == null) { return "<div>b is null</div>" } #%}           <!-- true -->
{% if (b != true) { return "<div>b is not true</div>" } #%}       <!-- true -->
{% if (b != false) { return "<div>b is not false</div>" } #%}     <!-- true -->
{% if (b != null) { return "<div>b is not null</div>" } #%}       <!-- false -->

{% if (s == "") { return "<div>s is empty string</div>" } #%}     <!-- true -->
{% if (s == null) { return "<div>s is null</div>" } #%}           <!-- true -->
{% if (s != "") { return "<div>s is not empty string</div>" } #%} <!-- false -->
{% if (s != null) { return "<div>s is not null</div>" } #%}       <!-- false -->

```

To summarize, an unassigned variable `== null`, `!= true`, `!= false`, `== ""`. The only one of these that may be surprising is the last one, `== ""`. However, [the documentation](https://docs.kentico.com/k8/macro-expressions/macro-syntax#Macrosyntax-Operators) does state such:

> 
> Empty strings are equal to null
> 
> 
>