Menu
Coddy logo textTech

Typy literałowe

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

Typy takie jak string dopuszczają dowolny ciąg znaków, ale czasami sens ma tylko kilka konkretnych wartości. Typ literału wykorzystuje samą wartość jako typ:

local mode: "dark" = "dark"   -- dozwolony jest tylko ciąg znaków "dark"
local locked: true = true      -- dozwolona jest tylko wartość logiczna true

Same typy o pojedynczej wartości są jedynie ciekawostką. W połączeniu z uniami stają się jednym z najbardziej przydatnych narzędzi Luau: ściśle kontrolowanym zestawem dozwolonych wartości:

type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"

local move: Direction = "north"     -- ✓
local state: GameState = "playing"  -- ✓
-- local bad: Direction = "diagonal" -- ✗ błąd typu!

Teraz literówka, taka jak "nort", lub nieprawidłowa wartość, taka jak "diagonal", zostanie wykryta podczas edycji. Przy zwykłym string taki kod przeszedłby bez problemu i spowodował błąd w czasie działania programu — o ile udałoby Ci się go zauważyć.

Typy literałów rozróżniają wielkość liter i muszą dokładnie się zgadzać: "North" nie pasuje do "north". Najczęściej używa się literałów tekstowych, ale literały logiczne oraz (w nowszych wersjach Luau) liczbowe działają tak samo. Ten wzorzec — unia literałów tekstowych — zastępuje również wyliczenia z innych języków, co zobaczysz w późniejszym rozdziale.

challenge icon

Wyzwanie

Łatwy

Utwórz trzy aliasy typów unii literałów:

  • Direction = "north" | "south" | "east" | "west"
  • GameState = "menu" | "playing" | "paused" | "gameover"
  • Difficulty = "easy" | "medium" | "hard"

Zadeklaruj, używając aliasów:

  • playerDirection: Direction = "north"
  • currentState: GameState = "playing"
  • selectedDifficulty: Difficulty = "medium"

Utwórz funkcję movePlayer(direction: Direction): string, która zwraca "Moving [direction]", oraz funkcję updateGameState(state: GameState): string, która zwraca "Game state: [state]".

Wypisz, każdą wartość w osobnym wierszu:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. wartość selectedDifficulty

Spróbuj swoich sił

-- Napisz kod tutaj
-- zdefiniuj typy Direction / GameState / Difficulty jako unie literałów
-- zadeklaruj playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- wypisz trzy wyniki
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online