Luaは、アプリケーションに組み込んで使用することも、単体で使用することもできます。本書では、Luaをコンピューターにインストールする手順については説明しませんが、Luaを使ったコードの実行には [http://codepad.org codepad] または [http://www.lua.org/demo.html the Lua demo] を使用してコードを実行することができます。
本書で紹介するLuaコードの最初の例は、基本的かつ伝統的なhello worldプログラムです。
[http://codepad.org/9urxcJh9 hello.lua]:
print("Hello, world!")
上のコードは、Hello, world! というテキストを出力しています。これは、文字列 "Hello, world!" を引数として print 関数を呼出して行っています。これについては、/関数についての章で説明します。
なお、Luaはほとんどの場合、低レベルのアプリケーションに組込まれているため、print 関数が常にユーザーから見える範囲にテキストを表示するとは限りません。これらのアプリケーションのプログラミング・インターフェースのドキュメントでは、一般に、テキストがユーザーにどのように表示される可能性があるかが説明されています。
コメントとは、プログラミング言語では無視されるコード注釈です。コメントは、1行または複数行のコードを記述したり、プログラムを文書化したり、コードを一時的に無効にしたり、その他の理由で使用できます。Luaで認識されるためには、ハイフン(-)を2つ付ける必要があります。また、独自の行に記述することも、他の行の末尾に記述することも可能です。
print("これは普通のコード")
-- これはコメント
print("これでも普通のコードです。") -- コード行末のコメントです。
このようなコメントをショートコメントと呼びます。長い括弧で始まり、何行にもわたって続く長いコメントを作成することも可能です。
print("これは普通のコード")
--[[1行目
2行目
]]
大括弧(''Long brackets'')は2つの大括弧([)から成り、その間に任意の数の等号(=)を置くことができます。この数を長大括弧のレベルと呼びます。大括弧は、同じレベルの次の大括弧がある場合、その大括弧まで続きます。等号のない大括弧は、レベル0の大括弧と呼ばれます。この方法によって、長いコメントの中で閉じる二重括弧を使用することが可能になり、2つの括弧の真ん中に等号を追加します。この方法は、コメントでコードのブロックを無効にするときによく役に立ちます。
--[==[
これは、ここにあるレベル0の閉じ大括弧を含むコメントです。 ]]
なぜなら、コメントはレベル2の開き大括弧で開かれており、レベル2の閉じ大括弧でしか閉じることができないからです。
]==]
上の例では、レベル0の閉じ大括弧(]])はコメントを閉じませんが、レベル2の閉じ長括弧(]==])はコメントを閉じます。
プログラミング言語の文法は、文や言葉の書き方を定義する（自然言語の）文法と同じように、そのプログラミング言語で文や式をどのように書かなければならないかを定義しています。文と式は、それぞれ文と言葉に例えることができます。式は値を持ち評価されるコードの断片であり、文は実行可能なコードの断片で、命令とその命令を使用するための1つまたは複数の式を含んでいます。例えば、3 + 5 は式で、文 variable = 3 + 5 は変数variableの値をその式の値にに設定する文です。
Luaの全シンタックスは、[https://www.lua.org/manual/5.4/manual.html#9 Luaのウェブサイト]にあるEBNF(Extended Backus–Naur Form)で見ることができますが、それを読んでも何もわからないと思います。EBNFはメタ言語、つまり他の言語を記述するために使われる言語で、ちょうどメタサイトがウェブサイトについてのウェブサイトであるように、そしてメタテーブルがLuaにおいて他のテーブルの動作を定義するテーブルであるように（この本の後半でメタテーブルとテーブルについて学びます）、他の言語を記述するために使われます。なぜなら、Luaのような言語はメタ言語を使って記述することもできますが、英語ここに「英語」とあるのは原書が英文だったからですが、「日本語」に置換えてしまうと整合性が取れない部分があるので、「自然言語」に置換えるべきかも知れません。の単語や文章を使って記述することも可能だからで、本書はまさにそれを目指しています。
英語を使って他の言語を記述できるのだから、それ自体がメタ言語でなければならない（メタ言語の定義に対応しているから）。これは確かにそうです。そして、プログラミング言語の目的は命令を記述することであり、英語を使ってそれができるのだから、英語もまたプログラミング言語でなければならない。これもある意味事実です。実際、英語はいろいろなことに使える言語です。しかし、EBNFは専門言語であり、プログラミング言語もまた専門言語です。専門化とは、ある特定のことをするのは非常に得意ですが、他のことはできない、という特性です。EBNFは、他の言語を記述するのには非常に優れていますが、命令を書いたり、メッセージを伝えたりするのには使えません。プログラミング言語は指示を与えることには非常に優れているが、言語を記述したり、メッセージを伝達したりすることには使えません。
英語は、言語を記述すること、指示を与えること、メッセージを伝達することのすべてを行うことができます。しかし、そのうちのいくつかは苦手です。実際、英語は指示を与えることが苦手で、コンピューターに指示を与えても、コンピューターは何も理解できません。なぜなら、コンピューターは非常に正確で曖昧でない指示を必要とするからです。
LuaはLuaの公式サイトの、[https://www.lua.org/download.html ダウンロードページ]で入手できます。ダウンロードのボタンはソースコード用ですが、おそらくあなたが欲しいのはソースコードではないでしょう。おそらくバイナリーを探しているのでしょうから、それに関する情報を探すために、このページを見て回る必要があります（厳密に何を探しているかは、使用しているプラットフォームに依存します）。本書の目的は、あくまでもLua言語を教えることであり、Luaツールの使い方を教えることではありません。一般的に、読者は組み込み環境でLuaを使用することを想定していますが、本書はその必要はありません。また、スタンドアロン言語としてのLuaの使用方法は説明しません。
{What does "Lua" mean in Portuguese?
| type="{}"}
{ moon (i) }
{Which of these is a long comment of level 0?
| type="()"}
- --Comment
|| This is a short comment. Short comments do not have a level.
- Comment
|| This is a long string, not a comment, because the two opening hyphens are missing.
+ --Comment
|| The level is equivalent to the number of equality symbols between the two brackets in both the opening and the closing parts. Since there are no such symbols in this case, the level is 0.
- --[=[Comment]=]
|| This is a long comment of level 1 because there is one equality symbol between the two brackets in the opening and closing parts.
- [=[Comment]=]
|| This is a long string, not a comment, for the same reason as the second choice.
}
{What is extended Backus–Naur form?
| type="[]"}
+ A language
- A programming language
|| While extended Backus–Naur form is used to describe programming languages, it is not itself a programming language.
- A natural (or ordinary) language
+ A notation
|| Extended Backus–Naur form is indeed a notation. The language described using a metalanguage is described by a metasyntax, which uses the notation of the metalanguage to describe the syntax of the language described.
+ A metalanguage
|| Extended Backus–Naur form is a language that is used to describe languages that generally are programming languages. Since it is a language used to describe other languages, it is a metalanguage.
- A markup language
|| Extended Backus–Naur form can be used to describe markup languages, although it is rarely used to do so, but it is not by itself a markup language.