Menu
CoddyTech

Właściwości opcjonalne

Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 41 z 80.

Nie każde pole jest zawsze obecne. W Lua odczyt brakującego pola tabeli zwraca po prostu nil, co jest elastyczne, ale właśnie tak mogą wkraść się błędy, takie jak attempt to concatenate a nil value.

Luau pozwala jawnie określić taki kształt: dodaj ? po typie pola, aby oznaczyć je jako opcjonalne:

type User = {
    name: string,   -- wymagane
    email: string?, -- opcjonalne: string lub nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ w porządku, email jest opcjonalny

Spotkałeś się już z tym w przypadku zmiennych: string? to skrót od string | nil. Ta sama zasada dotyczy teraz poszczególnych pól kształtu.

Ponieważ opcjonalne pole może mieć wartość nil, musisz sprawdzić je przed użyciem. Klasyczny wzorzec Lua działa, a w trybie ścisłym moduł sprawdzający zawęża typ wewnątrz gałęzi:

if bob.email then
    print(`email: {bob.email}`) -- tutaj email jest ciągiem znaków
else
    print("no email on file")
end

Opcjonalne oznacza „może być nieobecne”. Nie oznacza „dowolny typ”. Jeśli email istnieje, nadal musi być ciągiem znaków.

challenge icon

Wyzwanie

Łatwy

Wyświetl kontakty, których adres e-mail może nie być podany.

  1. Napisz type User = {name: string, email: string?}, następnie local mia: User = {name = "Mia", email = "mia@coddy.tech"} oraz local leo: User = {name = "Leo"}.
  2. Napisz local function printContact(user: User), która wyświetla `{user.name}: {user.email}` albo `{user.name}: no email`, jeśli adresu nie ma.
  3. Wywołaj ją dla mia, a następnie leo.

Naciśnij Uruchom kod: wynik pokazuje Mia: mia@coddy.tech i Leo: no email.

Spróbuj swoich sił

-- 1) typ User z opcjonalnym adresem email, a następnie mia i leo
-- 2) printContact(user: User) ze sprawdzeniem adresu email
-- 3) wywołaj ją dla mia, a następnie dla leo

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online