Menu
Coddy logo textTech

선택적 매개변수

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. Ada

string?는 "string 또는 nil"로 읽힙니다. 호출자는 문자열을 전달하거나 인수를 완전히 생략할 수 있습니다. ?가 *없는* 매개변수는 필수 항목이며, 타입 체커는 이를 생략한 호출에 경고를 표시합니다.

함수 내부에서 선택적 매개변수는 nil일 수 있으므로 using 전에 확인하세요 — if title then ... end가 표준 패턴입니다. check 과정을 생략하고 nil을 문자열에 연결하면 Lua가 항상 발생시켰던 것과 동일한 런타임 에러가 발생합니다. 타입 체커가 이를 먼저 경고해 줍니다.

challenge icon

챌린지

쉬움

username: string (필수)과 displayName: string? (선택)을 매개변수로 받고 string을 반환하는 createUserProfile 함수를 생성하세요:

  • 둘 다 제공된 경우, "Profile: [displayName] (@[username])"을 반환합니다.
  • username만 제공된 경우, "Profile: @[username]"을 반환합니다.

price: number (필수)와 membershipLevel: string? (선택)을 매개변수로 받고 number를 반환하는 calculateDiscount 함수를 생성하세요:

  • membershipLevel이 제공된 경우, 10% 할인된 가격을 반환합니다 (0.9를 곱함).
  • 그렇지 않으면 변동 없는 원래 가격을 반환합니다.

다음 명령을 호출하고 각각 한 줄씩 출력하세요:

  1. createUserProfile("john_doe", "John Doe")
  2. createUserProfile("jane_smith")
  3. calculateDiscount(100, "premium")
  4. calculateDiscount(75)

직접 해보기

-- 여기에 코드를 작성하세요
-- createUserProfile(username: string, displayName: string?): string
-- calculateDiscount(price: number, membershipLevel: string?): number
-- 그런 다음 네 개의 결과를 출력하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Luau 소개의 모든 레슨