Luaの拡張、Luauとは?

1. はじめに

Luau (読み: ルアゥ) は、Robloxで開発された、Lua 5.1.4をベースとしたスクリプト言語です。

LuauとLuaでは文法の扱い方などがすこし違います。

この記事では、私がStudioを使った上で経験したことのある、LuauとLua 5.1の文法の違いを一部紹介していきます。

2. Luauとは?

Luauは、Lua 5.1.4をベースに作られたLuaを拡張、改造したようなスクリプト言語です。

Luauでは、型指向プログラミングのようなことができます。

プログラマーに分かるように要約すると、結論は「JavaScriptがTypeScriptになったやつのLua版」ということになります。

どういうことかというと、これにはいくつかの共通点があります。

まず、TypeScriptでは、JavaScriptと異なり、Luauと同じように型指向プログラミングをすることができます。

また、Luauでは文字列の表現をする際にJavaScriptのようにテンプレート文字列表現ができます。

テンプレート文字列表現というのは、以下のように、文字列の中に変数等を入れて表現することができることです。

`Hello ${var} world!` // JavaScript
`Hello {var} world!` -- Luau

そして、LuauはRoblox内で素早く動作させるため、Luaよりも最適化されLuaJITのように高速化されています。

3. どういうところが違うのか

私が知っている範囲で紹介していくのですが、特に以下のようなことがLua 5.1と異なります。

  • 「continue」ステートメントでループを1回スキップできる。
  • C++やJavaScriptのように変数に対して代入演算子と算術演算子を組み合わせて使うことができる。
  • テンプレート文字列表現ができる。
  • I/O標準ライブラリが削除されている。
  • エディタ向けに型を指定できる。

一つ目に、continueを使ったループのスキップについては、以下のようなことができます。

local n = 0
for i = 1, 8 do
    if i % 2 == 0 then
        continue
    end
    n += 1
end

二つ目については、前述のコードにも含まれているように+=, -=, /=, ..=, ^=などの組み合わせを使うことができます。

三つ目には、2. Luauについて で示したような文字列表現ができます。

四つ目については、Roblox内でファイル操作をされないようにするために、I/O標準ライブラリは削除されています。

五つ目は型指向プログラミングのようなことができます。以下のような感じです。

ModuleScript

export type Numbers = {
    x: number,
    y: number,
    Value: NumberValue
}

return nil

Script

--!strict
require(ModuleScript)
local mynum: Numbers
mynum.x = 5
mynum.y = "String" -- エラー
mynum.Value = Instance.new("NumberValue")

このようにスクリプトエディタで打つと、型があるようなプログラミングができます。

上記のような型指定の例だと、コードの見栄えだけが変わるように思えますが、関数などの引数に活用すると、スクリプトエディタの自動完成機能がその型を触っているかのように書くことができます。日本語入力でいうと、ユーザー辞書を使って変換を容易にしているような状態です。

下記のコードでそのような機能を体験できます。

function unanchorPart(part: BasePart)
    part.Anchored = false
    -- この場合、Anchoredが候補に出てくる
end

4. まとめ

LuauはTypeScriptのように型指向プログラミング言語として拡張されたLuaである。

cool5u5

Roblox スクリプター、UIデザイナーで

Robloxアカウント:

https://www.roblox.com/users/1383665791/profile

回答

cool5u5
2024年 02⽉ 18⽇

1. はじめに

Luau (読み: ルアゥ) は、Robloxで開発された、Lua 5.1.4をベースとしたスクリプト言語です。

LuauとLuaでは文法の扱い方などがすこし違います。

この記事では、私がStudioを使った上で経験したことのある、LuauとLua 5.1の文法の違いを一部紹介していきます。

2. Luauとは?

Luauは、Lua 5.1.4をベースに作られたLuaを拡張、改造したようなスクリプト言語です。

Luauでは、型指向プログラミングのようなことができます。

プログラマーに分かるように要約すると、結論は「JavaScriptがTypeScriptになったやつのLua版」ということになります。

どういうことかというと、これにはいくつかの共通点があります。

まず、TypeScriptでは、JavaScriptと異なり、Luauと同じように型指向プログラミングをすることができます。

また、Luauでは文字列の表現をする際にJavaScriptのようにテンプレート文字列表現ができます。

テンプレート文字列表現というのは、以下のように、文字列の中に変数等を入れて表現することができることです。

`Hello ${var} world!` // JavaScript
`Hello {var} world!` -- Luau

そして、LuauはRoblox内で素早く動作させるため、Luaよりも最適化されLuaJITのように高速化されています。

3. どういうところが違うのか

私が知っている範囲で紹介していくのですが、特に以下のようなことがLua 5.1と異なります。

  • 「continue」ステートメントでループを1回スキップできる。
  • C++やJavaScriptのように変数に対して代入演算子と算術演算子を組み合わせて使うことができる。
  • テンプレート文字列表現ができる。
  • I/O標準ライブラリが削除されている。
  • エディタ向けに型を指定できる。

一つ目に、continueを使ったループのスキップについては、以下のようなことができます。

local n = 0
for i = 1, 8 do
    if i % 2 == 0 then
        continue
    end
    n += 1
end

二つ目については、前述のコードにも含まれているように+=, -=, /=, ..=, ^=などの組み合わせを使うことができます。

三つ目には、2. Luauについて で示したような文字列表現ができます。

四つ目については、Roblox内でファイル操作をされないようにするために、I/O標準ライブラリは削除されています。

五つ目は型指向プログラミングのようなことができます。以下のような感じです。

ModuleScript

export type Numbers = {
    x: number,
    y: number,
    Value: NumberValue
}

return nil

Script

--!strict
require(ModuleScript)
local mynum: Numbers
mynum.x = 5
mynum.y = "String" -- エラー
mynum.Value = Instance.new("NumberValue")

このようにスクリプトエディタで打つと、型があるようなプログラミングができます。

上記のような型指定の例だと、コードの見栄えだけが変わるように思えますが、関数などの引数に活用すると、スクリプトエディタの自動完成機能がその型を触っているかのように書くことができます。日本語入力でいうと、ユーザー辞書を使って変換を容易にしているような状態です。

下記のコードでそのような機能を体験できます。

function unanchorPart(part: BasePart)
    part.Anchored = false
    -- この場合、Anchoredが候補に出てくる
end

4. まとめ

LuauはTypeScriptのように型指向プログラミング言語として拡張されたLuaである。

  • トピックに返信するにはログインしてください
2024年 02⽉ 18⽇
キャンセル

        

この機能を利⽤するには
ログインする必要があります。