Lua/はじめに

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Lua

Luaは、ブラジルのリオデジャネイロにあるカトリック大学で設計され、メンテナンスされています。制作者は、Roberto Ierusalimschy、Waldemar Celes、Luiz Henrique de Figueiresoの3名です。

"Lua"(LOO-ahと発音)は、ポルトガル語で「月」を意味します。そのため、頭文字でも略称でもなく、名詞です。より具体的には、"Lua"は名前であり、地球の月の名前であり、言語の名前でもあります。一般的な名前と同様に、頭文字を大文字にして小文字で、すなわち "Lua" と書きます。"LUA" とは書かないでください。"LUA" と書くと、人によって意味の異なる頭字語になってしまうので、醜いし紛らわしいです。"Lua" と正しく書いてください。
—Lua authors, About Lua

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」と表示装置に出力するコンピュータープログラムです。ほとんどのプログラミング言語で可能な最も単純なプログラムの1つであるため、伝統的にプログラミング言語の最も基本的な構文を初心者に説明したり、言語やシステムが正しく動作することを確認するためによく使用される。
—Wikipedia, Hello world program
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の全シンタックスは、LuaのウェブサイトにあるEBNF(Extended Backus–Naur Form)で見ることができますが、それを読んでも何もわからないと思います。EBNFはメタ言語、つまり他の言語を記述するために使われる言語で、ちょうどメタサイトがウェブサイトについてのウェブサイトであるように、そしてメタテーブルがLuaにおいて他のテーブルの動作を定義するテーブルであるように(この本の後半でメタテーブルとテーブルについて学びます)、他の言語を記述するために使われます。なぜなら、Luaのような言語はメタ言語を使って記述することもできますが、英語[訳註 1]の単語や文章を使って記述することも可能だからで、本書はまさにそれを目指しています。

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

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

Luaの入手[編集]

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

Quiz[編集]

1 What does "Lua" mean in Portuguese?

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

--Comment
[[Comment]]
--[[Comment]]
--[=[Comment]=]
[=[Comment]=]

3 What is extended Backus–Naur form?

A language
A programming language
A natural (or ordinary) language
A notation
A metalanguage
A markup language


訳註[編集]

  1. ^ ここに「英語」とあるのは原書が英文だったからですが、「日本語」に置換えてしまうと整合性が取れない部分があるので、「自然言語」に置換えるべきかも知れません。