オプショナルパラメータ
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. Adastring? は「string または nil」という意味です。呼び出し側は string を渡すことも、引数全体を省略することもできます。? のないパラメーターは必須であり、それらを省略した呼び出しにはチェッカーが警告を出します。
関数内では、オプションのパラメーターが nil になる可能性があるため、使用する前に確認します。if title then ... end が標準的なパターンです。確認せずに nil を文字列に連結すると、Lua で常に発生していたものと同じ実行時エラーになります。型チェッカーはその前に警告してくれます。
チャレンジ
簡単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")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
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ