Menu
CoddyTech

선택적 속성

Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 80개 중 41번째.

모든 필드가 항상 있는 것은 아닙니다. Lua에서는 누락된 테이블 필드를 읽으면 단순히 nil이 반환됩니다. 유연한 방식이지만, attempt to concatenate a nil value와 같은 버그가 발생하는 원인이기도 합니다.

Luau에서는 타입 뒤에 ?를 추가해 필드를 선택 사항으로 표시하여 이 점을 명시할 수 있습니다.

type User = {
    name: string,   -- 필수
    email: string?, -- 선택 사항: string 또는 nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ 문제없음, email은 선택 사항

변수에서 이 개념을 이미 살펴봤습니다. string?은 string | nil의 줄임 표현입니다. 이제 같은 개념이 형태의 개별 필드에도 적용됩니다.

선택 사항인 필드는 nil일 수도 있으므로, 사용하기 전에 반드시 확인해야 합니다. Lua의 전형적인 패턴을 사용할 수 있으며, 엄격 모드에서는 검사기가 분기문 안에서 타입을 좁혀 줍니다.

if bob.email then
    print(`email: {bob.email}`) -- 여기서 email은 문자열입니다
else
    print("no email on file")
end

선택 사항이라는 것은 "없을 수도 있다"는 뜻입니다. "모든 타입이 될 수 있다"는 뜻은 아닙니다. email이 존재한다면 여전히 문자열이어야 합니다.

challenge icon

챌린지

쉬움

이메일이 없을 수도 있는 연락처를 출력하세요.

  1. type User = {name: string, email: string?}을 작성한 다음, local mia: User = {name = "Mia", email = "mia@coddy.tech"}와 local leo: User = {name = "Leo"}를 작성하세요.
  2. local function printContact(user: User)를 작성해 이메일이 있으면 `{user.name}: {user.email}`을, 없으면 `{user.name}: no email`을 출력하세요.
  3. mia에 대해 호출한 다음, leo에 대해 호출하세요.

코드 실행을 누르세요. 출력에 Mia: mia@coddy.tech와 Leo: no email이 표시됩니다.

직접 해보기

-- 1) 선택적 email이 있는 User 타입을 정의한 다음 mia와 leo를 정의
-- 2) email을 확인하는 printContact(user: User) 정의
-- 3) mia에 대해 호출한 다음 leo에 대해 호출

Luau 소개의 모든 레슨

직접 연습해 보세요: 온라인 Luau 컴파일러