Method self dan Method Titik Dua
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 43 dari 73.
Menulis rect.area(rect) bisa digunakan, tetapi di bab OOP Lua kamu sudah mempelajari cara yang lebih baik: titik dua. rect:area() adalah pemanggilan yang sama persis: Lua otomatis meneruskan tabel sebelum titik dua sebagai argumen pertama, yaitu self.
Titik dua juga membantu saat mendefinisikan fungsi. function account:deposit(amount) mendeklarasikan parameter pertama tersembunyi bernama self untukmu:
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self tersirat
end
function account:getBalance(): number
return self.balance
endPerhatikan bahwa bentuknya mendeklarasikan self secara eksplisit, yaitu deposit: (self: Account, amount: number) -> (), meskipun titik dua menyembunyikannya dalam implementasi. Titik dua adalah gula sintaksis. Parameternya tetap ada, dan tipe tersebut menyatakannya secara jelas. Method yang tidak mengembalikan apa pun memiliki tipe pengembalian kosong -> ().
Pemanggilannya mengikuti aturan yang sama seperti yang sudah kamu ketahui: account:deposit(250) identik dengan account.deposit(account, 250). Perilaku saat dijalankan sama seperti di bab OOP-mu: Luau hanya menambahkan tipe.
Tantangan
MudahBuat alias tipe bernama Account dengan:
ownerbertipestringbalancebertipenumberdeposit:(self: Account, amount: number) -> ()getBalance:(self: Account) -> number
Buat tabel account dengan owner "Maya" dan balance 1500, lalu tambahkan kedua method menggunakan sintaks definisi titik dua (function account:deposit(amount: number) …). deposit menambahkan amount ke balance; getBalance mengembalikan balance saat ini.
Menggunakan pemanggilan titik dua:
- cetak balance
- tambahkan
250 - cetak balance lagi
- cetak owner
Coba sendiri
-- Tulis kodemu di sini
-- 1) definisikan tipe Account (method mencantumkan self secara eksplisit dalam tipe ini)
-- 2) buat tabel akun, lalu tambahkan deposit/getBalance dengan sintaks titik dua
-- 3) cetak saldo, setorkan 250, cetak saldo lagi, lalu cetak pemilik
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengantar Luau
1Memulai dengan Luau
Apa Itu Luau?Mengapa Menggunakan Luau?Kode Luau PertamamuPemeriksaan Tipe dan Mode ErrorRangkuman: Pengenalan Luau4Bekerja dengan Fungsi
Menentukan Tipe Parameter dan Nilai KembalianMenentukan Tipe Fungsi AnonimFungsi yang Tidak Mengembalikan NilaiParameter OpsionalNilai Default ParameterFungsi VariadikMendefinisikan Tipe FungsiRangkuman: Fungsi Bertipe2Tipe Inti
Tipe Dasar: num, str, boolTipe 'any': Jalan Keluar DaruratTipe 'unknown'Nil & Tipe OpsionalInferensi Tipe dalam PraktikAnotasi Tipe EksplisitUlasan: Latihan Tipe Inti5Alias, Union, dan Intersection
Alias Tipe untuk Tipe PrimitifTipe UnionMenggunakan Tipe UnionTipe LiteralTipe IntersectionMenggabungkan Alias TipeRekap: Kombinasi Tipe Lanjutan3Tabel Bertipe: array dan Map
array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMelakukan Iterasi pada TabelTabel dengan Bentuk Campuranarray Bertipe Multidimensitable.unpack dan VarargsRingkasan: array dan Map6Pengetikan Bentuk Tabel
Anotasi Bentuk Secara InlineAlias Tipe untuk BentukProperty OpsionalBentuk vs. Tabel LonggarMemperluas BentukMenambahkan method ke BentukMethod self dan Method Titik DuaUlasan: Mendefinisikan Bentuk TabelLatihan sendiri: Compiler Luau online