Menu
CoddyTech

Property Opsional

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

Tidak setiap field selalu ada. Di Lua, membaca field tabel yang tidak ada akan menghasilkan nil, yang fleksibel, tetapi hal ini juga menjadi celah munculnya bug seperti attempt to concatenate a nil value.

Luau memungkinkan sebuah bentuk menyatakan hal ini secara eksplisit: tambahkan ? setelah tipe field untuk menandainya sebagai opsional:

type User = {
    name: string,   -- wajib
    email: string?, -- opsional: string atau nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ boleh, email bersifat opsional

Kamu pernah menemui hal ini sebelumnya pada variabel: string? adalah singkatan dari string | nil. Kini, gagasan yang sama berlaku untuk setiap field dalam suatu bentuk.

Karena field opsional mungkin bernilai nil, kamu harus memeriksanya sebelum menggunakannya. Pola Lua klasik tetap bisa digunakan, dan dalam mode strict, pemeriksa tipe akan mempersempit tipe di dalam percabangan:

if bob.email then
    print(`email: {bob.email}`) -- di sini email adalah string
else
    print("no email on file")
end

Opsional berarti "mungkin tidak ada". Itu bukan berarti "tipe apa pun". Jika email ada, nilainya tetap harus berupa string.

challenge icon

Tantangan

Mudah

Buat alias tipe bernama User dengan:

  • name bertipe string (wajib)
  • email bertipe string? (opsional)

Buat dua pengguna:

  • alice: nama "Alice", email "alice@luau.dev"
  • bob: nama "Bob", tanpa email

Buat fungsi printContact yang menerima User. Jika pengguna memiliki email, fungsi tersebut mencetak [name] - [email]; jika tidak, fungsi tersebut mencetak [name] - no email.

Lalu:

  1. panggil printContact(alice)
  2. panggil printContact(bob)
  3. cetak hasil perbandingan bob.email == nil

Coba sendiri

-- Tulis kodemu di sini
-- 1) definisikan tipe User dengan field email opsional
-- 2) buat alice (dengan email) dan bob (tanpa email)
-- 3) tulis printContact dengan pemeriksaan nil
-- 4) panggil printContact untuk kedua pengguna, lalu cetak bob.email == nil
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