선택적 속성
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이 존재한다면 여전히 문자열이어야 합니다.
챌린지
쉬움이메일이 없을 수도 있는 연락처를 출력하세요.
type User = {name: string, email: string?}을 작성한 다음,local mia: User = {name = "Mia", email = "mia@coddy.tech"}와local leo: User = {name = "Leo"}를 작성하세요.local function printContact(user: User)를 작성해 이메일이 있으면`{user.name}: {user.email}`을, 없으면`{user.name}: no email`을 출력하세요.mia에 대해 호출한 다음,leo에 대해 호출하세요.
코드 실행을 누르세요. 출력에 Mia: mia@coddy.tech와 Leo: no email이 표시됩니다.
직접 해보기
-- 1) 선택적 email이 있는 User 타입을 정의한 다음 mia와 leo를 정의
-- 2) email을 확인하는 printContact(user: User) 정의
-- 3) mia에 대해 호출한 다음 leo에 대해 호출
Luau 소개의 모든 레슨
4함수 다루기
매개변수와 반환값의 타입 지정익명 함수의 타입 지정아무것도 반환하지 않는 함수선택적 매개변수기본 매개변수 값불리언 기본값가변 인자 함수함수 타입 정의하기복습: 타입이 지정된 함수직접 연습해 보세요: 온라인 Luau 컴파일러