デフォルトパラメータ値
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 は偽値であるため、これが機能します。nil or "Hello" は "Hello" と評価されます。その行の後では、チェッカーは greeting がもはや nil になり得ないことを認識します。
Lua で知っている注意点が 1 つあります。or は false も置き換えます。boolean? パラメーターの場合、flag = flag or true とすると、明示的に指定された false が黙って上書きされます。代わりに、明示的な nil チェックを使ってください。
function ship(weight: number, expedited: boolean?): number
if expedited == nil then
expedited = false
end
-- ...
endチャレンジ
簡単price: number(必須)と、0.05をデフォルト値とするrate: number?を受け取るcalculateTaxという名前の関数を作成してください。税額(price * rate)をnumberとして返してください。
name: string(必須)と、"Hello"をデフォルト値とするtimeOfDay: string?を受け取るformatGreetingという名前の関数を作成してください。"[timeOfDay], [name]!"をstringとして返してください。
weight: number、distance: number(どちらも必須)、およびデフォルト値をfalseとするexpedited: boolean?を受け取るcalculateShippingという名前の関数を作成してください。この引数には明示的なnilチェックを使用してください!(weight * 0.5) + (distance * 0.1)を計算し、expeditedがtrueの場合は結果に2を掛けてください。numberを返してください。
次の関数を呼び出して出力してください。それぞれ1行ずつ出力します。
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
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ