선택적 속성
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 39번째.
모든 field가 항상 존재하는 것은 아닙니다. Lua에서는 누락된 테이블 field를 읽으면 단순히 nil이 되므로 유연하지만, attempt to concatenate a nil value와 같은 버그가 발생하는 원인이 되기도 합니다.
Luau에서는 shape가 이를 명시적으로 나타낼 수 있습니다. field의 type 뒤에 ?를 추가하여 optional임을 표시하세요.
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의 축약형입니다. 이제 동일한 개념이 shape의 개별 field에도 적용됩니다.
optional field는 nil일 수 있으므로, 사용하기 전에 반드시 check해야 합니다. 고전적인 Lua 패턴이 작동하며, strict mode에서는 checker가 분기 내부에서 type의 범위를 좁힙니다.
if bob.email then
print(`email: {bob.email}`) -- 여기서 email은 문자열입니다
else
print("no email on file")
endoptional은 "없을 수도 있음"을 의미합니다. "어떤 type이든 가능함"을 의미하는 것은 아닙니다. email이 존재한다면 여전히 string이어야 합니다.
챌린지
쉬움User라는 이름의 타입 별칭을 다음과 같이 만드세요:
- 필수인
string타입의name - 선택 사항인
string?타입의email
두 명의 사용자를 만드세요:
alice: 이름"Alice", 이메일"alice@luau.dev"bob: 이름"Bob", 이메일 없음
User를 인수로 받는 printContact 함수를 만드세요. 사용자에게 이메일이 있으면 [name] - [email]을 출력하고, 그렇지 않으면 [name] - no email을 출력합니다.
그런 다음:
printContact(alice)을 호출하세요.printContact(bob)을 호출하세요.bob.email == nil을 비교한 결과를 출력하세요.
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) 선택적 email 필드가 있는 User 타입을 정의하세요
-- 2) alice(email 있음)와 bob(없음)을 생성하세요
-- 3) nil 검사가 있는 printContact를 작성하세요
-- 4) 두 사용자 모두에 대해 호출한 다음 bob.email == nil을 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러