デフォルトパラメータ値
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 26/73。
オプショナルパラメーターでは処理すべき nil が発生します。多くの場合、本当に必要なのはフォールバック値、つまり「呼び出し元が指定しなかった場合は X とみなす」ということです。Luau のシグネチャにはデフォルト構文が存在しません(greeting: string = "Hello" のような記法はありません)。その代わりに、型を追加した伝統的な Lua の慣習(idiom)を使用します:
function greet(name: string, greeting: string?): string
greeting = greeting or "Hello"
return `{greeting}, {name}`
end
print(greet("Alice")) -- こんにちは、Alice
print(greet("Alice", "Howdy")) -- やあ、Aliceパラメーターはオプショナル(string?)として注釈付けされており、処理本体の最初の行で nil をデフォルト値に置き換えています。これは nil が偽(falsy)であるために機能します — nil or "Hello" は "Hello" に評価されます。この行ののち、チェッカーは greeting がもはや nil になり得ないことを認識します。
Lua から知られている注意点が 1 つあります:or は false も置き換えてしまいます!boolean? パラメーターの場合、flag = flag or true は明示的な(explicit)false も静かに上書きしてしまいます。代わりに明示的な nil チェックを使用してください:
function ship(weight: number, expedited: boolean?): number
if expedited == nil then
expedited = false
end
-- ...
endチャレンジ
簡単price: number(必須)と、0.05 をデフォルト値とする rate: number? を受け取る calculateTax という名前の function を作成してください。税額(price * rate)を number として return します。
name: string(必須)と、"Hello" をデフォルト値とする timeOfDay: string? を受け取る formatGreeting という名前の function を作成してください。"[timeOfDay], [name]!" を string として return します。
weight: number、distance: number(ともに必須)と、false をデフォルト値とする expedited: boolean? を受け取る calculateShipping という名前の function を作成してください — これについては明示的な nil check を使用してください!(weight * 0.5) + (distance * 0.1) を計算し、expedited が true の場合は結果に 2 を掛けます。number を return します。
それぞれを改行して呼び出し、print してください:
calculateTax(100)calculateTax(200, 0.08)formatGreeting("Alice")formatGreeting("Bob", "Good morning")calculateShipping(5, 100)calculateShipping(3, 50, true)
自分で試してみよう
-- ここにコードを書く
-- calculateTax(price: number, rate: number?) -- デフォルトの rate は 0.05
-- formatGreeting(name: string, timeOfDay: string?) -- デフォルトは "Hello"
-- calculateShipping(weight, distance, expedited: boolean?) -- デフォルトは false
-- その後、6つの結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数