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"))          -- こんにちは、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])"
  • ユーザー名のみが指定された場合、次を返します: "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
-- 次に4つの結果を出力してください
quiz icon腕試し

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

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