Property Opsional
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 41 dari 80.
Tidak setiap field selalu ada. Di Lua, field tabel yang tidak ada cukup dibaca sebagai nil, yang fleksibel, tetapi hal ini juga menjadi penyebab bug seperti attempt to concatenate a nil value muncul.
Luau memungkinkan bentuk data menyatakannya 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"} -- ✓ tidak masalah, email bersifat opsionalKamu pernah menemui ini sebelumnya pada variabel: string? adalah bentuk singkat dari string | nil. Gagasan yang sama sekarang berlaku untuk setiap field dalam bentuk data.
Karena field opsional mungkin bernilai nil, kamu harus memeriksanya sebelum menggunakannya. Pola klasik Lua tetap berfungsi, dan dalam mode strict, pemeriksa tipe mempersempit tipe di dalam cabang:
if bob.email then
print(`email: {bob.email}`) -- di sini email adalah string
else
print("no email on file")
endOpsional berarti "mungkin tidak ada". Itu bukan berarti "tipe apa pun". Jika email ada, nilainya tetap harus berupa string.
Tantangan
MudahCetak kontak yang emailnya mungkin tidak ada.
- Tulis
type User = {name: string, email: string?}, lalulocal mia: User = {name = "Mia", email = "mia@coddy.tech"}danlocal leo: User = {name = "Leo"}. - Tulis
local function printContact(user: User)untuk mencetak`{user.name}: {user.email}`, atau`{user.name}: no email`jika tidak ada. - Panggil fungsi itu untuk
mia, laluleo.
Tekan Jalankan: output menampilkan Mia: mia@coddy.tech dan Leo: no email.
Coba sendiri
-- 1) buat tipe User dengan email opsional, lalu buat mia dan leo
-- 2) buat fungsi printContact(user: User) yang memeriksa email
-- 3) panggil fungsi itu untuk mia, lalu leo
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
Mengetik Parameter dan Nilai KembalianMengetik Fungsi AnonimFungsi Tanpa Nilai KembalianParameter OpsionalNilai Parameter DefaultNilai Default untuk BooleanFungsi VariadikMendefinisikan Tipe FungsiUlasan: Fungsi Bertipe2Tipe Inti
Number, String, dan BooleanTipe 'any': Jalan KeluarTipe 'unknown'Nil dan 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 & map
Array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMenelusuri TabelTabel dengan Bentuk CampuranMembaca GridMembuat Gridtable.unpackRangkuman: array dan mapLatihan sendiri: Compiler Luau online