Lua adalah bahasa pemrograman skrip tingkat tinggi yang ringan, dirancang terutama untuk sistem dan aplikasi tertanam. Awalnya dikembangkan di Brasil, Lua dikenal karena kesederhanaannya, efisiensinya, dan portabilitasnya. Lua diakui secara luas karena penggunaannya dalam pengembangan game, aplikasi web, dan sebagai bahasa skrip di berbagai platform perangkat lunak. Bahasa ini memiliki sintaks yang sederhana dan fitur-fitur kuat yang mencakup fungsi kelas satu, penutupan, dan manajemen memori otomatis.
Lua diciptakan pada awal 1990-an di Universitas Katolik Pusat Rio de Janeiro di Brasil. Tujuan awal bahasa ini adalah untuk menyediakan solusi skrip yang fleksibel dan dapat diperluas untuk aplikasi pemrosesan data. Para pencipta asli—Roberto Ierusalimschy, Luiz Henrique de Figueiredo, dan Waldemar Celes—berusaha mengembangkan bahasa yang dapat dengan mudah diintegrasikan ke dalam perangkat lunak yang ada.
Selama bertahun-tahun, Lua telah berkembang secara signifikan sambil mempertahankan prinsip inti kesederhanaan dan efisiensi. Versi resmi pertama, Lua 1.0, dirilis pada tahun 1993, dan versi-versi berikutnya telah memperkenalkan peningkatan dan fitur baru. Pada tahun 2006, Lua 5.1 dirilis, menandai tonggak penting dengan pengenalan sistem modul dan perbaikan dalam korutin. Saat ini, Lua berada pada versi 5.4 (per 2020), yang lebih meningkatkan kemampuannya, terutama dalam hal kinerja dan pengumpulan sampah.
Filosofi desain Lua terinspirasi oleh beberapa bahasa seperti C, JavaScript, dan Scheme, tetapi tetap berbeda dalam desainnya yang ringan dan fungsi kelas satu. Lua juga dikenal karena interoperabilitasnya dengan bahasa pemrograman lain, memungkinkan integrasi yang mudah ke dalam aplikasi C, C++, dan Java.
Lua terutama digunakan sebagai bahasa skrip tertanam dalam aplikasi, dengan peran yang menonjol dalam pengembangan game melalui mesin seperti Unity dan Corona SDK. Sifatnya yang ringan menjadikannya ideal untuk aplikasi cloud, server web, dan perangkat IoT.
Lua adalah bahasa yang diketik secara dinamis, yang berarti Anda tidak perlu menyatakan tipe data dari sebuah variabel secara eksplisit. Misalnya:
x = 10 -- x adalah angka
x = "Hello" -- Sekarang x adalah string
Dalam Lua, fungsi adalah nilai kelas satu, yang berarti mereka dapat ditugaskan ke variabel, diteruskan sebagai argumen, dan dikembalikan dari fungsi lain.
function add(a, b)
return a + b
end
sum = add
print(sum(5, 10)) -- Output: 15
Tabel adalah struktur data utama di Lua, berfungsi sebagai array, kamus, dan objek.
myTable = {key1 = "value1", key2 = "value2"}
print(myTable.key1) -- Output: value1
Lua mendukung penutupan, memungkinkan fungsi untuk menangkap variabel dari lingkungan sekitarnya.
function counter()
local count = 0
return function()
count = count + 1
return count
end
end
myCounter = counter()
print(myCounter()) -- Output: 1
print(myCounter()) -- Output: 2
Lua mendukung korutin, yang memfasilitasi multitasking kooperatif.
co = coroutine.create(function ()
for i = 1, 5 do
coroutine.yield(i)
end
end)
print(coroutine.resume(co)) -- Output: true 1
print(coroutine.resume(co)) -- Output: true 2
Lua menggunakan metatable untuk mengubah perilaku tabel, memungkinkan pengalihan operator.
mt = {}
mt.__add = function(t1, t2)
return t1[1] + t2[1]
end
setmetatable(t1, mt)
setmetatable(t2, mt)
print(t1 + t2) -- Output: Hasil berdasarkan implementasi
Penanganan string di Lua cukup sederhana, dengan fungsi bawaan untuk operasi seperti penggabungan dan pencocokan pola.
str = "Hello, "
str = str .. "World!" -- Penggabungan
print(str) -- Output: Hello, World!
Lua menyediakan mekanisme penanganan kesalahan yang sederhana melalui fungsi pcall
.
function riskyFunction()
error("Terjadi kesalahan!")
end
status, err = pcall(riskyFunction)
print(status) -- Output: false
print(err) -- Output: Terjadi kesalahan!
Lua menggabungkan manajemen memori otomatis melalui pengumpul sampah, yang membantu mengembalikan memori yang tidak terpakai secara otomatis.
-- Lua menangani memori secara otomatis; tidak diperlukan manajemen eksplisit
Lua mendukung modul untuk membantu memisahkan dan mengorganisir kode, meningkatkan praktik pemrograman modular.
-- mymodule.lua
local mymodule = {}
function mymodule.sayHello()
print("Hello from mymodule!")
end
return mymodule
-- main.lua
local mymodule = require("mymodule")
mymodule.sayHello() -- Output: Hello from mymodule!
Lua dapat disematkan ke dalam aplikasi dengan mudah menggunakan API C-nya, yang berarti aplikasi apa pun biasanya dapat menjalankan skrip Lua. Interpreter Lua ringan dan dapat mengeksekusi skrip di lingkungan mana pun yang mendukung C.
Lua dapat dikembangkan secara efisien menggunakan berbagai IDE seperti:
Untuk membangun proyek di Lua, Anda biasanya menulis skrip Lua Anda, dan jika sebuah aplikasi menggunakan pustaka Lua, kompilasi aplikasi hosting yang akan memanggil kode Lua. Skrip Lua biasanya disimpan dengan ekstensi file .lua
dan dieksekusi melalui command line menggunakan lua script.lua
.
Lua digunakan secara luas dalam:
Lua sering dibandingkan dengan beberapa bahasa:
Lua sangat dihargai dalam situasi di mana ukuran dan kecepatan sangat penting, menjadikannya favorit bagi pengembang game dan sistem tertanam. Berbeda dengan C++, Java, atau C#, di mana overhead mungkin substansial, sifat ringan Lua memungkinkan iterasi yang lebih cepat dan konsumsi sumber daya yang lebih sedikit.
Saat menerjemahkan kode Lua ke bahasa lain, penting untuk diingat:
Saat ini, tidak ada alat terjemahan sumber ke sumber yang populer khusus untuk Lua, tetapi beberapa alat umum seperti SWIG (Simplified Wrapper and Interface Generator) dapat digunakan untuk menghubungkan Lua dengan basis kode C/C++, memungkinkan beberapa tingkat integrasi atau terjemahan antara kedua bahasa.