선택적 매개변수
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 25번째.
일반 Lua에서는 인수를 언제나 생략할 수 있었습니다. 생략된 인수는 암묵적으로 nil이 되었고, 이를 처리하는 것을 잊는 것은 버그의 전형적인 원인이었습니다. Luau는 이 가능성을 명시적으로 만듭니다. 매개변수 타입에 ?를 추가하여 **선택적(optional)** 항목으로 표시하세요.
function greet(name: string, title: string?): string
if title then
return `{title} {name}`
end
return `Hello, {name}`
end
print(greet("Ada")) -- Hello, Ada
print(greet("Ada", "Dr.")) -- Dr. Adastring?는 "string 또는 nil"로 읽힙니다. 호출자는 문자열을 전달하거나 인수를 완전히 생략할 수 있습니다. ?가 *없는* 매개변수는 필수 항목이며, 타입 체커는 이를 생략한 호출에 경고를 표시합니다.
함수 내부에서 선택적 매개변수는 nil일 수 있으므로 using 전에 확인하세요 — if title then ... end가 표준 패턴입니다. check 과정을 생략하고 nil을 문자열에 연결하면 Lua가 항상 발생시켰던 것과 동일한 런타임 에러가 발생합니다. 타입 체커가 이를 먼저 경고해 줍니다.
챌린지
쉬움username: string (필수)과 displayName: string? (선택)을 매개변수로 받고 string을 반환하는 createUserProfile 함수를 생성하세요:
- 둘 다 제공된 경우,
"Profile: [displayName] (@[username])"을 반환합니다. - username만 제공된 경우,
"Profile: @[username]"을 반환합니다.
price: number (필수)와 membershipLevel: string? (선택)을 매개변수로 받고 number를 반환하는 calculateDiscount 함수를 생성하세요:
- membershipLevel이 제공된 경우, 10% 할인된 가격을 반환합니다 (
0.9를 곱함). - 그렇지 않으면 변동 없는 원래 가격을 반환합니다.
다음 명령을 호출하고 각각 한 줄씩 출력하세요:
createUserProfile("john_doe", "John Doe")createUserProfile("jane_smith")calculateDiscount(100, "premium")calculateDiscount(75)
직접 해보기
-- 여기에 코드를 작성하세요
-- createUserProfile(username: string, displayName: string?): string
-- calculateDiscount(price: number, membershipLevel: string?): number
-- 그런 다음 네 개의 결과를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.