Menu
Coddy logo textTech

선택적 매개변수

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

string?은 "string 또는 nil"이라는 뜻입니다. 호출자는 문자열을 전달하거나 인수를 완전히 생략할 수 있습니다. ?없는 매개변수는 필수이며, 검사기는 해당 매개변수를 생략한 호출을 표시합니다.

함수 내부에서 선택적 매개변수는 nil일 수 있으므로, 사용하기 전에 확인하세요. if title then ... end가 표준 패턴입니다. 확인을 건너뛰고 nil을 문자열에 연결하면 Lua에서 항상 발생하던 것과 동일한 런타임 오류가 발생하며, 타입 검사기가 먼저 경고해 줍니다.

challenge icon

챌린지

쉬움

username: string(필수)와 displayName: string?(선택 사항)를 매개변수로 받고 string을 반환하는 createUserProfile이라는 함수를 만드세요:

  • 두 값이 모두 제공되면 다음을 반환하세요: "Profile: [displayName] (@[username])"
  • username만 제공되면 다음을 반환하세요: "Profile: @[username]"

price: number(필수)와 membershipLevel: string?(선택 사항)를 매개변수로 받고 number를 반환하는 calculateDiscount라는 함수를 만드세요:

  • 멤버십 등급이 제공되면 가격에서 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 소개의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러