1. ホーム
  2. スクリプト・コラム
  3. ルア

初心者のためのLua言語チュートリアル

2022-01-06 19:58:44

I. 序文

Luaは、標準C言語で書かれた軽量かつ小規模なスクリプト言語で、オープンソースです。アプリケーションに組み込むことで、拡張やカスタマイズを柔軟に行うことができるように設計されています。

Luaは、ゲーム開発、スタンドアローンアプリケーションのスクリプト、Webアプリケーションのスクリプト、拡張機能やデータベースプラグイン、セキュリティシステムなどのシーンで使用することができます。

主にWebアプリケーション(Nginx、Redis)でLuaスクリプトを使えるようになるために学びました。

特徴

  • Luaスクリプトは、C/C++コードから簡単に呼び出すことができ、またその逆も可能です。
  • Luaは標準C言語で書かれており、コードはクリーンで美しく、ほとんどすべてのOSとプラットフォームでコンパイル、実行できます。
  • 非常に小さなサイズとシンプルな構文で、包括的な機能を提供します。[Luaのフルインタープリタはわずか200kで、Luaは利用可能なあらゆるスクリプトエンジンの中で最も高速です]。
  • ホスト言語とのクリーンなインターフェイスを実装
  • 他の言語で使用するために簡単に埋め込むことができる言語であること。

特徴

  • オブジェクト指向プログラミングのサポート
  • 軽量化
  • スケーラブル
  • 関数型プログラミング
  • 自動メモリ管理
  • テーブルテーブルの汎用タイプで、配列、ハッシュテーブル、コレクション、オブジェクトを実装できる。
  • クロージャのサポート
  • マルチスレッド対応
  • 対話型プログラミングのサポート

II. インストール

注意事項 Luaをインストールする前に、readlineとreadline-develがシステムにインストールされていることを確認してください。 yum install -y readline readline-devel をインストールしてください。

curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz
tar zxf lua-5.3.4.tar.gz
cd lua-5.3.4
make linux test

テストするには、コマンドラインで lua -v と入力してください。

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio

正しくインストールされていることを示すLuaのバージョンを表示します。

III. 実行方法

他のスクリプト言語と同様、Luaのコードは接尾辞が.luaのファイルに記述する必要があります。

このファイルのコードを実行するには、コマンドラインで lua xx.lua と入力するだけです。

IV. シンタックス

4.1 データ型

Luaには、nil、boolean、number、string、userdata、function、thread、tableの8つの基本データ型があります。

<テーブル データの種類 説明 ゼロ 無効な値を示し、条件式では偽を意味する。 ブーリアン trueとfalseの2つの値を持つブール値。 数 倍精度型の実数浮動小数点数を示す。 文字列 二重引用符または一重引用符で囲まれた文字列を表します。 ユーザーデータ 変数に格納された任意のCデータ構造を表現する 機能 CまたはLuaで書かれた関数を示す スレッド 連携プログラムを実行するための別スレッドを示す。 テーブル 連想配列を表し、配列のインデックスには数値または文字列を指定します。

a=10
str="hello world"

変数の型を宣言する代わりに、type()を使って変数の型を決定することができます。

なお、この

(a) Luaの変数には、グローバル変数、ローカル変数、テーブルのフィールドの3種類があります。

デフォルトでは、変数はどこで宣言されてもグローバル変数となります。ローカルで変更される変数はローカル変数です。

変数のデフォルトは nil です。

4.2 演算子

1)代入演算子

str="hello"... "world" -- by . Connecting strings
a,b=10,15 -- a=10,b=15
c,d,e=1,2 -- c=1,b=2,e=nil

2)算術演算子

他のプログラミング言語と同様。

a,b=10,15
c=a+b -- plus sign
d=a-b -- minus sign
e=a*b -- multiplication sign
f=a/b -- division sign
g=a%b -- remainder
h=a^2 -- multiplication
i=-a -- negative sign

3) 関係演算子

他のプログラミング言語と同様。

a,b=10,15
print(a>b) -- greater than
print(a<b) -- less than
print(a==b) -- equal to
print(a~=b) -- not equal

4) 論理演算子

print(true and false) -- with
print(true or false) -- or
print(not true) -- not

5)その他の演算子

<テーブル 演算子 説明 ... 2つの文字列を結合する # 文字列またはテーブルの長さを返します。例:#"lua"

4.3 プロセス制御

1)条件付き判定、書き方は3つある。

-- if statement
if(true)
then
 print("hello")
end
-- if ... else statement
a,b=10,15
if(a>b)
then
 print(a)
else
 print(b)
end
-- if nested
c=20
if(c>10)
then
 if(c<30)
 then
 print(c)
 end
end

2)ループ、4通りの書き方。

<テーブル タイプ 説明 時間ループ 条件が真のときに、プログラムにステートメントを繰り返させる。 forループ 指定された文の実行を繰り返し、繰り返し回数はforで制御される。数値やジェネリックを繰り返し処理することができる。 を繰り返し、...まで 指定された条件が真になるまでループを繰り返す。 ループのネスト ループの中に複数のループ文を入れ子にします。

-- while loop
a=10
while(a>0)
do
 print(a)
 a=a-1
end
-- for loop, iterate through the numbers
for a=1,10,1 do
 print(a)
end
-- repeat ... until loop
a=10
repeat
 print(a)
 a=a-1
until(a<1)

4.4 配列

Luaの配列はサイズが可変で、添え字が1から始まります。

arr={"h","e","l","l","o"}
-- This uses the iterative numeric approach
for index=1,#arr do
 print(arr[index])
end
-- this uses the iterative generic approach
for i,v in ipairs(arr) do
 print(i,v)
end

4.5 機能

-- Case 1
function calc(a,b,c)
 return a+b+c
end
result=calc(1,2,3)
print(result)
-- Case 2
function getCalc(a,b,c)
 return a,b,c
end
r1,r2,r3=getCalc(1,2,3)
print(r1,r2,r3)

Luaの関数では、複数の値を返すことができます。

4.6表

テーブルとは、Luaにおけるデータ構造の一つで、JavaにおけるMap型やJavascriptにおけるJSONオブジェクトと同様のものです。

Luaのテーブルは連想配列を使用し、配列のインデックスには任意の型の値を使用できますが、nilにすることはできません。

Luaのテーブルは、サイズが固定されていません。

person={}
person.name="jack"
person.age=20
print(person[1])
print(person.name)
print(person["age"])

4.7 モジュールとパッケージ

モジュールは、ラッパーライブラリに似ています。Lua 5.1からは、標準的なモジュール管理メカニズムが追加され、いくつかの共通コードをファイル内に配置し、APIインターフェースとして他の場所から呼び出せるようになり、コードの再利用が容易になり、コードの結合を減らすことができます。

Luaのモジュールは、変数や関数など、既知の要素をまとめた表で構成されています。

例えば

module.luaという名前のファイルを作成します。

module={}
module.index=1
function module.sum(a,b)
 return a+b
end

もうひとつのドキュメントを紹介します。

-- where module is the filename
require "module"
-- where module is the name defined in the introduced module
print(module.index)
print(module.sum(1,2))

概要

上記は、この記事のすべての内容であり、私はあなたの勉強や仕事のためのこの記事の内容は、特定の参照学習価値を持って願って、あなたが交換するメッセージを残すことができる質問がある場合は、スクリプトハウスのあなたのサポートをありがとうございました。