Lua/はじめに
Luaは、ブラジルのリオデジャネイロにあるカトリック大学で設計され、メンテナンスされています。制作者は、Roberto Ierusalimschy、Waldemar Celes、Luiz Henrique de Figueiresoの3名です。
Luaは、TeCGraf(リオデジャネイロの教皇庁カトリック大学の研究室)が設計した2つの言語に由来しています。DELとSolです。DELは「データ入力言語」、Solは「単純なオブジェクト言語」という意味で、ポルトガル語で太陽を意味することから、Luaという名前になったそうです。ブラジルの石油会社ペトロブラスのために作られたものでしたが、TeCGrafの他のプロジェクトでも多く使われ、現在では世界中の多数のプロジェクトで使用されています。Luaは、組み込みゲーム開発の分野では代表的な言語の一つです。
Luaの大きなメリットの1つは、そのシンプルさです。企業によっては、この利点のためにLuaを独占的に使用しています。あるタスクを実行するためにプログラミング言語を使用できれば、従業員はより良い仕事ができると考えていますが、従業員に複雑なプログラミング言語のフルコースを提供する余裕はありません。BashやBatchのような非常にシンプルな言語では、これらのタスクを実行するには十分なパワーがありませんが、Luaはパワフルかつシンプルな言語なのです。Luaのもう一つの重要な長所は、その開発全体を通して最も重要な特徴の一つであった組込みが可能であることです。World of WarcraftやROBLOXのようなゲームでは、アプリケーションにLuaを埋め込んで、アプリケーションのユーザーが使えるようにする必要があります。
プログラミングは、組込みアプリケーションの内部で動作するプログラムの場合にはスクリプトと呼ばれることもあり、コンピューターのプログラムを書く作業のことです。プログラミング言語は、コンピューターのプログラムに含まれるコンピューター・コードを通じてコンピューターに指示を与えるために使われる言語です。プログラミング言語は、英語の文法のような「文法」と、その言語に備わっている基本機能「ライブラリ」の2つで構成されている。このライブラリは、英語でいうところのボキャブラリーに例えることができます。
Hello, world!

Luaは、アプリケーションに組み込んで使用することも、単体で使用することもできます。本書では、Luaをコンピューターにインストールする手順については説明しませんが、Luaを使ったコードの実行には codepad または the Lua demo を使用してコードを実行することができます。 本書で紹介するLuaコードの最初の例は、基本的かつ伝統的なhello worldプログラムです。
Hello, world!

上のコードは、Hello, world! というテキストを出力しています。これは、文字列 "Hello, world!" を引数として print 関数を呼出して行っています。これについては、/関数についての章で説明します。
Hello, world!

なお、Luaはほとんどの場合、低レベルのアプリケーションに組込まれているため、print 関数が常にユーザーから見える範囲にテキストを表示するとは限りません。これらのアプリケーションのプログラミング・インターフェースのドキュメントでは、一般に、テキストがユーザーにどのように表示される可能性があるかが説明されています。
コメント

コメントとは、プログラミング言語では無視されるコード注釈です。コメントは、1行または複数行のコードを記述したり、プログラムを文書化したり、コードを一時的に無効にしたり、その他の理由で使用できます。Luaで認識されるためには、ハイフン(-)を2つ付ける必要があります。また、独自の行に記述することも、他の行の末尾に記述することも可能です。
文法

プログラミング言語の文法は、文や言葉の書き方を定義する(自然言語の)文法と同じように、そのプログラミング言語で文や式をどのように書かなければならないかを定義しています。文と式は、それぞれ文と言葉に例えることができます。式は値を持ち評価されるコードの断片であり、文は実行可能なコードの断片で、命令とその命令を使用するための1つまたは複数の式を含んでいます。例えば、3 + 5 は式で、文 variable = 3 + 5 は変数variableの値をその式の値にに設定する文です。
文法

Luaの全シンタックスは、LuaのウェブサイトにあるEBNF(Extended Backus–Naur Form)で見ることができますが、それを読んでも何もわからないと思います。EBNFはメタ言語、つまり他の言語を記述するために使われる言語で、ちょうどメタサイトがウェブサイトについてのウェブサイトであるように、そしてメタテーブルがLuaにおいて他のテーブルの動作を定義するテーブルであるように(この本の後半でメタテーブルとテーブルについて学びます)、他の言語を記述するために使われます。なぜなら、Luaのような言語はメタ言語を使って記述することもできますが、英語の単語や文章を使って記述することも可能だからで、本書はまさにそれを目指しています。
文法

英語を使って他の言語を記述できるのだから、それ自体がメタ言語でなければならない(メタ言語の定義に対応しているから)。これは確かにそうです。そして、プログラミング言語の目的は命令を記述することであり、英語を使ってそれができるのだから、英語もまたプログラミング言語でなければならない。これもある意味事実です。実際、英語はいろいろなことに使える言語です。しかし、EBNFは専門言語であり、プログラミング言語もまた専門言語です。専門化とは、ある特定のことをするのは非常に得意ですが、他のことはできない、という特性です。EBNFは、他の言語を記述するのには非常に優れていますが、命令を書いたり、メッセージを伝えたりするのには使えません。プログラミング言語は指示を与えることには非常に優れているが、言語を記述したり、メッセージを伝達したりすることには使えません。
文法

英語は、言語を記述すること、指示を与えること、メッセージを伝達することのすべてを行うことができます。しかし、そのうちのいくつかは苦手です。実際、英語は指示を与えることが苦手で、コンピューターに指示を与えても、コンピューターは何も理解できません。なぜなら、コンピューターは非常に正確で曖昧でない指示を必要とするからです。
Luaの入手

LuaはLuaの公式サイトの、ダウンロードページで入手できます。ダウンロードのボタンはソースコード用ですが、おそらくあなたが欲しいのはソースコードではないでしょう。おそらくバイナリーを探しているのでしょうから、それに関する情報を探すために、このページを見て回る必要があります(厳密に何を探しているかは、使用しているプラットフォームに依存します)。本書の目的は、あくまでもLua言語を教えることであり、Luaツールの使い方を教えることではありません。一般的に、読者は組み込み環境でLuaを使用することを想定していますが、本書はその必要はありません。また、スタンドアロン言語としてのLuaの使用方法は説明しません。
Quiz

1 What does "Lua" mean in Portuguese?
Quiz

2 Which of these is a long comment of level 0?
Quiz

3 What is extended Backus–Naur form?