luau/docs/_pages/getting-started.md
2021-02-11 12:00:32 -08:00

3.4 KiB

permalink title toc
/getting-started Getting Started true

To get started with Luau you need to install Roblox Studio, which you can download here.

Creating a place

If you just want to experiment with the language itself, you can create a simple baseplate game.

Creating a script

To create your own testing script, go to ServerScriptService in the explorer tree and add a Script object.

Double-click on the script object and paste this:

function ispositive(x)
    return x > 0
end

print(ispositive(1))
print(ispositive("2"))

function isfoo(a)
    return a == "foo"
end

print(isfoo("bar"))
print(isfoo(1))

Note that there are no warnings about calling ispositive() with a string, or calling isfoo() a number.

Enabling type inference

Now modify the script to include --!strict at the top:

--!strict

function ispositive(x)
    return x > 0
end

print(ispositive(1))
print(ispositive("2"))

function isfoo(a)
    return a == "foo"
end

print(isfoo("bar"))
print(isfoo(1))

Note that the editor now highlights the incorrect calls to ispositive() and isfoo().

Annotations

You can add annotations to locals, arguments, and function return types. Among other things, annotations can help enforce that you don't accidentally do something stupid. Here's how we would add annotations to ispositive():

--!strict

function ispositive(x : number) : boolean
    return x > 0
end

local result : boolean
result = ispositive(1)

Everything is good. We've told the editor that ispositive() accepts a number and returns a boolean, and that's how we're using it. But imagine that later we decide to change ispositive() to return a string value:

--!strict

function ispositive(x : number) : boolean
    if x > 0 then
        return "yes"
    else
        return "no"
    end
end

local result : boolean
result = ispositive(1)

Oops -- we're returning string values, but we forgot to update the function return type. Since print() accepts anything, the call to ispositive() is still valid. But because the annotation doesn't match our code, we get a warning in the function body itself:

And then of course, the fix is simple; just change the annotation to declare the return type as a string.

--!strict

function ispositive(x : number) : string
    if x > 0 then
        return "yes"
    else
        return "no"
    end
end

local result : boolean
result = ispositive(1)

Well, almost - we also declared result as a boolean, and now that's clearly wrong.

So now we update the type of the local variable, and everything is good.

--!strict

function ispositive(x : number) : string
    if x > 0 then
        return "yes"
    else
        return "no"
    end
end

local result : string
result = ispositive(1)

Conclusions

To dive into more areas of Luau, check out our main reference pages for syntax and typechecking