Menu
CoddyTech

Membekukan Tabel Konstanta

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 55 dari 73.

Satu kelemahan tabel konstanta: tabel itu tetaplah tabel biasa. Kode apa pun, di mana pun, bisa menulis UserRole.Admin = 99, dan "konstanta" kamu diam-diam tidak lagi konstan.

Luau menutup celah ini dengan table.freeze. Membekukan tabel menjadikannya hanya-baca saat runtime: setiap upaya untuk menambahkan, mengubah, atau menghapus field akan memunculkan error. Pola yang umum adalah membekukan tabel tepat saat tabel itu dibuat: table.freeze mengembalikan tabel yang sama, siap untuk ditetapkan:

local Color = table.freeze({
    Red = 1,
    Green = 2,
    Blue = 3,
})

print(Color.Red) -- 1: membaca nilainya tetap berjalan seperti biasa
Color.Gold = 4   -- ✗ error: mencoba mengubah tabel yang hanya bisa dibaca

Berbeda dengan hal lain yang telah kamu pelajari sejauh ini dalam kursus ini, perlindungan ini bekerja saat runtime: error sungguhan muncul tepat saat penulisan dijalankan, bukan peringatan saat penyuntingan. Perlindungan ini bahkan menangkal kode yang tidak pernah diperiksa oleh pemeriksa tipe.

Dua hal terkait yang perlu kamu ketahui: table.isfrozen(t) mengembalikan apakah sebuah tabel dibekukan, dan pembekuan bersifat dangkal: tabel bersarang tetap bisa diubah kecuali kamu juga membekukannya. Kamu juga tidak bisa membatalkan pembekuan: setelah dibekukan, tabel akan tetap beku.

Tabel konstanta beku ditambah union literal untuk parameter adalah enum Luau yang lengkap: nilai runtime bernama yang tidak bisa diutak-atik siapa pun, serta pemeriksaan saat penyuntingan di mana pun nilai tersebut digunakan.

challenge icon

Tantangan

Mudah

Buat tabel konstanta beku bernama Color, buat dan bekukan dalam satu langkah dengan table.freeze, yang berisi:

  • Red = 1
  • Green = 2
  • Blue = 3

Buat tabel biasa (tidak beku) bernama settings dengan field volume = 5.

Cetak setiap nilai pada barisnya sendiri:

  1. Color.Red
  2. Color.Blue
  3. apakah Color beku (table.isfrozen)
  4. apakah settings beku
  5. hasil percobaan menambahkan field ke Color di dalam pcall: panggil pcall(function() Color.Gold = 4 end) dan cetak nilai boolean yang dikembalikannya

Coba sendiri

-- Tulis kodemu di sini
-- 1) local Color = table.freeze({Red = 1, Green = 2, Blue = 3})
-- 2) local settings = {volume = 5}
-- 3) Cetak Color.Red, Color.Blue, dan kedua hasil isfrozen
-- 4) Gunakan pcall untuk mencoba penulisan yang dilarang, lalu cetak nilai boolean yang dikembalikan
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online