Lua - Modul

Apa itu Modul?

Module seperti perpustakaan yang dapat dimuat menggunakan require dan memiliki satu nama global yang berisi tabel. Modul ini dapat terdiri dari beberapa fungsi dan variabel. Semua fungsi dan variabel ini digabungkan ke dalam tabel, yang bertindak sebagai namespace. Juga, modul yang berperilaku baik memiliki ketentuan yang diperlukan untuk mengembalikan tabel ini pada saat diminta.

Khusus Modul Lua

Penggunaan tabel dalam modul membantu kita dalam berbagai cara dan memungkinkan kita untuk memanipulasi modul dengan cara yang sama kita memanipulasi tabel Lua lainnya. Sebagai hasil dari kemampuan untuk memanipulasi modul, ia menyediakan fitur tambahan yang membutuhkan mekanisme khusus untuk bahasa lain. Karena mekanisme modul gratis di Lua ini, pengguna dapat memanggil fungsi di Lua dengan berbagai cara. Beberapa di antaranya ditampilkan di bawah.

-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")

-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")

-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")

Pada contoh kode di atas, Anda dapat melihat seberapa fleksibel pemrograman di Lua, tanpa kode tambahan khusus.

Fungsi yang dibutuhkan

Lua telah menyediakan fungsi tingkat tinggi yang disebut require untuk memuat semua modul yang diperlukan. Itu dibuat sesederhana mungkin untuk menghindari terlalu banyak informasi pada modul untuk memuatnya. Fungsi yang dibutuhkan hanya mengasumsikan modul sebagai potongan kode yang mendefinisikan beberapa nilai, yang sebenarnya merupakan fungsi atau tabel yang berisi fungsi.

Contoh

Mari kita perhatikan contoh sederhana, di mana satu fungsi memiliki fungsi matematika. Mari kita sebut modul ini sebagai mymath dan nama file menjadi mymath.lua. Isi file adalah sebagai berikut -

local mymath =  {}

function mymath.add(a,b)
   print(a+b)
end

function mymath.sub(a,b)
   print(a-b)
end

function mymath.mul(a,b)
   print(a*b)
end

function mymath.div(a,b)
   print(a/b)
end

return mymath

Sekarang, untuk mengakses modul Lua ini di file lain, katakanlah, moduletutorial.lua, Anda perlu menggunakan segmen kode berikut.

mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)

Untuk menjalankan kode ini, kita perlu menempatkan dua file Lua dalam direktori yang sama atau sebagai alternatif, Anda dapat menempatkan file modul di jalur paket dan membutuhkan pengaturan tambahan. Saat kita menjalankan program di atas, kita akan mendapatkan output sebagai berikut.

30
10
200
1.5

Hal-hal untuk diingat

  • Tempatkan modul dan file yang Anda jalankan di direktori yang sama.

  • Nama modul dan nama filenya harus sama.

  • Merupakan praktik terbaik untuk mengembalikan modul untuk fungsi require dan karenanya modul sebaiknya diimplementasikan seperti yang ditunjukkan di atas meskipun Anda dapat menemukan jenis implementasi lain di tempat lain.

Cara Lama Menerapkan Modul

Izinkan saya sekarang menulis ulang contoh yang sama dengan cara yang lebih lama, yang menggunakan jenis implementasi package.seeall. Ini digunakan di Lua versi 5.1 dan 5.0. Modul mymath ditampilkan di bawah ini.

module("mymath", package.seeall)

function mymath.add(a,b)
   print(a+b)
end

function mymath.sub(a,b)
   print(a-b)
end

function mymath.mul(a,b)
   print(a*b)
end

function mymath.div(a,b)
   print(a/b)
end

Penggunaan modul dalam moduletutorial.lua ditunjukkan di bawah ini.

require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)

Ketika kita menjalankan di atas, kita akan mendapatkan hasil yang sama. Tetapi disarankan untuk menggunakan versi kode yang lebih lama dan dianggap kurang aman. Banyak SDK yang menggunakan Lua untuk pemrograman seperti Corona SDK telah menghentikan penggunaan ini.