Lua:Keywords

From Total War Modding

A keyword is a special word that has been taken for the program, so we can't use it in our own as the name of a variable, function, etc.

We’ve covered the majority of the Lua keywords, but there are a few left that we have to cover. We’ll cover the final keywords that aren’t loop/table-based in this tutorial, and we’ll cover tables and loops in the next! We only have three to touch on.

If, Elseif, Else

So, we’ve seen conditional statements – if these things, then do this. But we haven’t covered their full usage!

First things first – if you want stuff to happen based on a condition, you use that word I just used twice – if.

    local var = 5

    if var == 5 then
        -- [[ do stuff ]]
    end

Note that then defines a new scope here, and that scope ends at, well, end. The conditional is the statement between if and then.

    local var = 5

    function example()
        if var == 5 then -- if var is equivalent to 5 then...
            out("This is 5!")
            return
        end
        out("Not 5!")
    end

    example() → This is 5!

    var = 10

    example() → Not 5!

In this example, we’re checking whether var is 5. If it is, we print “This is 5!”; if it isn’t, we print “Not 5!”. We prevent the printing of both of them by using the return – otherwise, if the var were 5, both outs would be called.

We can also do this by using the else keyword:

    local var = 5

    function example()
        if var == 5 then
            out("This is 5!")
        else
            out("Not 5!")
        end
    end

    example() → This is 5!

    var = 10

    example() → Not 5!

Functionally, exactly the same. However, it’s prettier to look at, and makes more sense to read. Do note that else also creates its own scope; in this instance, there is a scope between then and else; and another between else and end.

What if we wanted to check for more than one specific condition? We can use elseif!

    local var = 5

    function example()
        if var == 5 then
            out("This is 5!")
        elseif var == 7 then
            out("This is 7!")
        else
            out("Not 5 or 7!")
        end
    end

    example() → This is 5!

    var = 7

    example() → This is 7!

    var = 10

    example() → Not 5 or 7!

We can use more than one elseif, too. Only one if or else within that block between if and the first end, though.

Do keep in mind that whichever “path” works first is the one that will be used, and the ones following it will be ignored, until the end of the conditional.

    local var = 10

    function example()
        if var > 5 then
            out("This is greater than 5!")
        elseif var == 5 then
            out("This is 5!")
        elseif var == 7 then
            out("This is 7!")
        else
            out("Less than 5, not 7!")
        end
    end

    example() → This is greater than 5!

    var = 5

    example() → This is 5!

    var = 7

    example() → Less than 5, not 7!

Even though the var matches the second conditional statement – var == 7 – for the final assignment, it also matches the first condition, so that’s the one and only path the code takes here.

Do note that you can do just one if and elseif, or an if and an else, or all three, or just an if, or like twenty elseif’s. Though that’s bad code, don’t do that.

End, Then, Do

The keyword end is needed to denote the end of a scope, when that scope is defined by something other than the entire file. Each of the following keywords need an end to finish their scope:

  • then
  • do
  • function

And the keyword then is needed after the conditional statement for an if or elseif.

The keyword do is used in two instances; one, to create a new scope without needing any other keywords (see example below).

    local var = 5

    do
        local var = 10
        out(var) → 10
    end

    out(var) → 5

The other, and more common, usage of do is to attach it to loop keywords. Read on to the next chapter!