Menu
CoddyTech

Kształty a luźne tabele

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

Masz teraz dwa sposoby pracy z tabelami rekordów: swobodny, którego zawsze używałeś w Lua, oraz zadeklarowane kształty. Warto zatrzymać się na chwilę i zobaczyć, co daje każdy z nich.

Swobodna tabela przyjmuje wszystko. Ta elastyczność ma swoją cenę: literówka w polu (user.nmae) sprawia, że po cichu otrzymujesz nil; pominięcie pola powoduje, że błąd ujawnia się dużo później — w czasie działania programu, w kodzie, który jako pierwszy natrafi na brakujące pole:

local user = {name = "Ana", age = 20}
print(user.nmae) -- tabela bez ścisłej kontroli: bez ostrzeżenia wypisuje nil

Zadeklaruj kształt, a te pomyłki przeniosą się z czasu działania programu na etap edycji. Kontroler zgłosi literówkę w chwili, gdy ją wpiszesz, edytor może podpowiadać nazwy pól, a deklaracja type pełni również funkcję dokumentacji zawartości tabeli:

type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ błąd typu: nie znaleziono klucza 'nmae' w User

Jeśli znasz TypeScript, pamiętaj, że Luau nie ma słowa kluczowego interface: type obsługuje wszystkie kształty. Nie ma też „łączenia deklaracji”: zadeklarowanie dwóch typów o tej samej nazwie w tym samym zakresie jest błędem, więc każdy kształt ma dokładnie jedną definicję.

Kształty w Luau są strukturalne: każda tabela z właściwymi polami o właściwych typach pasuje, niezależnie od tego, gdzie i jak została utworzona. Swobodne tabele również mają swoje zastosowanie: krótkie skrypty i naprawdę dynamiczne dane nie wymagają zadeklarowanego kształtu. Jednak w przypadku danych przekazywanych między funkcjami kształt pozwala wykryć pomyłki, gdy ich naprawa jest jeszcze tania.

challenge icon

Wyzwanie

Łatwy

Przekształć luźną tablicę w tablicę o zadeklarowanym kształcie.

  1. Nad tablicą napisz type Pet = {name: string, age: number}.
  2. Dodaj adnotację do tablicy: local pet: Pet = {name = "Biscuit", age = 3}.
  3. Pod pierwszą instrukcją print dodaj print(pet.age).

Naciśnij Uruchom kod: wynik pokazuje Biscuit i 3.

Spróbuj swoich sił

-- Swobodna tabela: nic nie sprawdza jej pól
local pet = {name = "Biscuit", age = 3}
print(pet.name)

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online