| ActiveTcl User Guide |

# Numeric Comparisons 101 - if

Like most languages, Tcl supports an if command. The syntax is:

- `if` `expr1` `?then?` `body1` `elseif` `expr2` `?then?` `body2` `elseif` ... `?else?` `?bodyN?`

The words `then` and `else` are optional, although generally `then` is left out and `else` is used.

The test expression following `if` should return a value that can be interpreted as representing "true" or "false":

| False | True
a numeric value | 0 | all others
yes/no | no | yes
true/false | false | true

If the test expression returns a string "yes"/"no" or "true"/"false", the case of the return is not checked. True/FALSE or YeS/nO are legitimate returns.

If the test expression evaluates to True, then `body1` will be executed.

If the test expression evaluates to False, then the word after `body1` will be examined. If the next word is `elseif`, then the next test expression will be tested as a condition. If the next word is `else` then the final `body` will be evaluated as a command.

The test expression following the word `if` is evaluated in the same manner as in the `expr` command.

The test expression following `if` may be enclosed within quotes, or braces. If it is enclosed within braces, it will be evaluated within the `if` command, and if enclosed within quotes it will be evaluated during the substitution phase, and then another round of substitutions will be done within the `if` command.

Note: This extra round can cause unexpected trouble - avoid it.

## Example

    set x 1

    if {$x == 2} {puts "$x is 2"} else {puts "$x is not 2"}

    if {$x != 1} {
        puts "$x is != 1"
    } else {
        puts "$x is 1"
    }

    if $x==1 {puts "GOT 1"}

    #
    # Be careful, this is just an example
    # Usually you should avoid such constructs,
    # it is less than clear what is going on and it can be dangerous
    #
    set y x
    if "$$y != 1" {
        puts "$$y is != 1"
    } else {
        puts "$$y is 1"
    }

    #
    # A dangerous example: due to the extra round of substitution,
    # the script stops
    #
    set y {[exit]}
    if "$$y != 1" {
        puts "$$y is != 1"
    } else {
        puts "$$y is 1"
    }