オプショナルパラメータ
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. Adastring? は「string または nil」と読みます。呼び出し元は文字列を渡すことも、引数を完全に省略することもできます。? の付いていないパラメータは必須であり、それらを省略した呼び出しには型チェッカーが警告を出します。
関数内部では、オプショナルなパラメータは nil になる可能性があるため、使用する前にチェックしてください — if title then ... end が標準的なパターンです。チェックをスキップして nil を文字列に連結すると、Luaが常に発生させていたのと同じランタイムエラーが発生します。型チェッカーはそれを事前に警告してくれます。
チャレンジ
簡単username: string(必須)と displayName: string?(任意)を受け取り、string を返す createUserProfile という名前の関数を作成してください:
- 両方が指定された場合、次を返します:
"Profile: [displayName] (@[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
-- 次に4つの結果を出力してください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数