100の言語Spedrdrun:エピソード04:Lua
Luaはブラジルからの小さなプログラミング言語であり、おそらく世界中で大きな影響を与えたブラジルから出てきた唯一の技術である.
他の言語からのLuaを区別する主な特徴は、それが実際に既存のアプリケーションに埋め込まれていることに適しているということです、そして、それは特にテレビゲームのために人気がありますhere's just a partial list ).
原則として、Tcl、Python、JavaScriptなどの既存の言語の任意の仮想マシンについてだけで埋め込むことができます.これはLuaを埋め込むよりはるかに複雑である傾向があります.最近JavaScriptは、その主要なニッチからLuaをますますプッシュしていますが、ゲーム開発やモーディングを取得する場合は、いくつかの基本的なLuaはまだ有用なスキルを持っている.我々はルアを探索するように、なぜそれが人気を失っているいくつかの理由を発見することがあります.
こんにちは、世界!
このコードはあまり驚かないでしょう.
テーブル
Luaは、配列/リストと辞書/ハッシュ/オブジェクトとして役立つ「テーブル」と呼ばれている一つのデータ構造を持ちます.
実際にどのように動作するかを見てみましょう.
我々自身の検査を書きましょう
まあ、自分自身の検査を書くのは難しいことではない.それは驚くべきではなく、かなりきれいな印刷をしません、そして、データがそれ自体にリンクするならば、それは無限ループに入ることができます、そして、その上、それは現在我々の目的に役に立ちます.
文字列は テーブル内のキーの順序は保存されません 配列番号は1から始まります! 最後の1つは少しのショックかもしれません.今日では、プログラミング言語は0ベースと1ベースのインデックスの間に分割された.Luaは、これらの回の最後の残高については、0ベースのインデックスを獲得している.
ところで、Perlは陽気に
ユニコード
LuaがUnicodeでどのように対処するかを見てみましょう.
あなたはLuaを使用する必要がありますか?
正直に新しいプログラムのためにではなく、実際には、それはまだゲームの開発に興味がある場合は基本を知る価値がある.それはまだゲームのスクリプトで重要な存在感を持っています.あなたが見たように、非常に単純なことをしても、言語の弱さのために問題を起こし続けました.
Luaはまた、コミュニティの断片化に重大な問題があるようです.Lujit実装はLua 5.1のかなり古いバージョンをサポートしていますが、メイン言語は5.3にすでに移行しました.Luaコードがいくつかのエンジン(通常ゲームエンジン)に埋め込まれる傾向があるので、コードの多くはエンジンによって提供されるいろいろな機能に依存して、他の所で走らないでしょう.Luarocksは3000のパッケージを持っています.そして、それはすべての岩が彼らがそうしないあらゆるルアーで走ったとしても、130 kのRuby Gemsまたは1.3 M NPMパッケージと比較して小さいです.
たった今、Luaは途中で言語のように見えます、しかし、ものはまだ回ることができました.そして、他のほとんどのソフトウェアとは異なり-ビデオゲームは、リリース後に使用数十年を参照してください、それらのルアコードで.
コード
All code examples for the series will be in this repository .
Code for the Lua episode is available here .
他の言語からのLuaを区別する主な特徴は、それが実際に既存のアプリケーションに埋め込まれていることに適しているということです、そして、それは特にテレビゲームのために人気がありますhere's just a partial list ).
原則として、Tcl、Python、JavaScriptなどの既存の言語の任意の仮想マシンについてだけで埋め込むことができます.これはLuaを埋め込むよりはるかに複雑である傾向があります.最近JavaScriptは、その主要なニッチからLuaをますますプッシュしていますが、ゲーム開発やモーディングを取得する場合は、いくつかの基本的なLuaはまだ有用なスキルを持っている.我々はルアを探索するように、なぜそれが人気を失っているいくつかの理由を発見することがあります.
こんにちは、世界!
このコードはあまり驚かないでしょう.
print("Hello, World!")
ここでfibonacciは、あまり奇妙ではない--
コメントと範囲ループ構文-- Fibonacci function
function fib(n)
if n < 3 then
return 1
else
return fib(n - 1) + fib(n - 2)
end
end
for i = 1,30 do
print(fib(i))
end
そして、フィズバズfunction fizzbuzz(n)
if n % 15 == 0 then
return "FizzBuzz"
elseif n % 5 == 0 then
return "Buzz"
elseif n % 3 == 0 then
return "Fizz"
else
return n
end
end
for i = 1,100 do
print(fizzbuzz(i))
end
テーブル
Luaは、配列/リストと辞書/ハッシュ/オブジェクトとして役立つ「テーブル」と呼ばれている一つのデータ構造を持ちます.
実際にどのように動作するかを見てみましょう.
local x = {"foo", "bar"}
local y = {"foo", "bar"}
print(x)
print(y)
print(x == y)
私たちがうんざりするだろう{"foo", "bar"}
{"foo", "bar"}
true
しかし、代わりに我々が得るものは:table: 0x7fb9cee04080
table: 0x7fb9cee040e0
false
そうですね.Luaは複雑なタイプ(JavaScriptによって共有される同じblight)に取り組んでいる平等を持ちません、そして、それはビルトインさえありませんconsole.log
.我々自身の検査を書きましょう
まあ、自分自身の検査を書くのは難しいことではない.それは驚くべきではなく、かなりきれいな印刷をしません、そして、データがそれ自体にリンクするならば、それは無限ループに入ることができます、そして、その上、それは現在我々の目的に役に立ちます.
function inspect(value)
if type(value) == "table" then
local result = ""
for k, v in pairs(value) do
if result ~= "" then
result = result .. ", "
end
result = result .. tostring(k) .. "=" .. inspect(v)
end
return "{" .. result .. "}"
else
return tostring(value)
end
end
local x = {"foo", "bar"}
local y = {name="Bob", surname="Ross", age=52}
print(inspect(x))
print(inspect(y))
これは{1=foo, 2=bar}
{age=52, name=Bob, surname=Ross}
私たちは何を学びましたか.type(value)
パスの種類を返します."table"
大部分の複合型のために..
, ストリング補間はありません!=
綴られる~=
ところで、Perlは陽気に
$[
これは配列インデクシングを決定する特別な変数でした.彼らはある時点でこの機能を削除しました.それは実際に全く正気ではありませんでした、それはPerlにawkスクリプトを移植するのを助けるように設計されました.多分、私は若干の点でその話に着きます.ユニコード
LuaがUnicodeでどのように対処するかを見てみましょう.
a = "Hello"
b = "Żółw"
c = "💩"
print(a:lower())
print(b:upper())
print(#a)
print(#b)
print(#c)
そして、それがわかるように、非常に不十分です.hello
ŻółW
5
7
4
残念ながら:lower()
and :upper()
ユニコードについて何も知らない#
文字列の長さを返します.string.len(a)
と同じです#a
, バイト数を返す).あなたはLuaを使用する必要がありますか?
正直に新しいプログラムのためにではなく、実際には、それはまだゲームの開発に興味がある場合は基本を知る価値がある.それはまだゲームのスクリプトで重要な存在感を持っています.あなたが見たように、非常に単純なことをしても、言語の弱さのために問題を起こし続けました.
Luaはまた、コミュニティの断片化に重大な問題があるようです.Lujit実装はLua 5.1のかなり古いバージョンをサポートしていますが、メイン言語は5.3にすでに移行しました.Luaコードがいくつかのエンジン(通常ゲームエンジン)に埋め込まれる傾向があるので、コードの多くはエンジンによって提供されるいろいろな機能に依存して、他の所で走らないでしょう.Luarocksは3000のパッケージを持っています.そして、それはすべての岩が彼らがそうしないあらゆるルアーで走ったとしても、130 kのRuby Gemsまたは1.3 M NPMパッケージと比較して小さいです.
たった今、Luaは途中で言語のように見えます、しかし、ものはまだ回ることができました.そして、他のほとんどのソフトウェアとは異なり-ビデオゲームは、リリース後に使用数十年を参照してください、それらのルアコードで.
コード
All code examples for the series will be in this repository .
Code for the Lua episode is available here .
Reference
この問題について(100の言語Spedrdrun:エピソード04:Lua), 我々は、より多くの情報をここで見つけました https://dev.to/taw/100-languages-speedrun-episode-04-lua-1ofmテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol