선택적 매개변수
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 25번째.
일반적인 Lua에서는 인수를 언제나 생략할 수 있었습니다. 생략된 인수는 조용히 nil이 되었고, 이를 처리하지 않는 것이 버그의 전형적인 원인이었습니다. Luau에서는 이러한 가능성을 명시적으로 표현합니다. 매개변수의 타입에 ?를 추가하여 선택 사항임을 표시하세요.
function greet(name: string, title: string?): string
if title then
return `{title} {name}`
end
return `Hello, {name}`
end
print(greet("Ada")) -- 안녕하세요, Ada
print(greet("Ada", "Dr.")) -- Dr. Adastring?은 "string 또는 nil"이라는 뜻입니다. 호출자는 문자열을 전달하거나 인수를 완전히 생략할 수 있습니다. ?가 없는 매개변수는 필수이며, 검사기는 해당 매개변수를 생략한 호출을 표시합니다.
함수 내부에서 선택적 매개변수는 nil일 수 있으므로, 사용하기 전에 확인하세요. if title then ... end가 표준 패턴입니다. 확인을 건너뛰고 nil을 문자열에 연결하면 Lua에서 항상 발생하던 것과 동일한 런타임 오류가 발생하며, 타입 검사기가 먼저 경고해 줍니다.
챌린지
쉬움username: string(필수)와 displayName: string?(선택 사항)를 매개변수로 받고 string을 반환하는 createUserProfile이라는 함수를 만드세요:
- 두 값이 모두 제공되면 다음을 반환하세요:
"Profile: [displayName] (@[username])" - username만 제공되면 다음을 반환하세요:
"Profile: @[username]"
price: number(필수)와 membershipLevel: string?(선택 사항)를 매개변수로 받고 number를 반환하는 calculateDiscount라는 함수를 만드세요:
- 멤버십 등급이 제공되면 가격에서 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
-- 그런 다음 네 개의 결과를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러