Menu
Coddy logo textTech

オプショナルパラメータ

CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 25/73。

プレーンな Lua では、引数を常に省略できました。省略された引数は暗黙に nil になり、それを処理し忘れることがバグの典型的な原因でした。Luau ではこの可能性を明示します。パラメーターの型に ? を追加して、オプションであることを示します。

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」という意味です。呼び出し側は string を渡すことも、引数全体を省略することもできます。? のないパラメーターは必須であり、それらを省略した呼び出しにはチェッカーが警告を出します。

関数内では、オプションのパラメーターが 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という名前の関数を作成してください。

  • membershipLevelが指定されている場合は、価格を10%減らした値(0.9を掛けた値)を返します
  • それ以外の場合は、価格を変更せずに返します

次の処理を、それぞれ1行ずつ呼び出して出力してください。

  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
-- 次に4つの結果を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Luau入門のすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ