Menu
Coddy logo textTech

デフォルトパラメータ値

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 つあります。orfalse も置き換えます。boolean? パラメーターの場合、flag = flag or true とすると、明示的に指定された false が黙って上書きされます。代わりに、明示的な nil チェックを使ってください。

function ship(weight: number, expedited: boolean?): number
    if expedited == nil then
        expedited = false
    end
    -- ...
end
challenge icon

チャレンジ

簡単

price: number(必須)と、0.05をデフォルト値とするrate: number?を受け取るcalculateTaxという名前の関数を作成してください。税額(price * rate)をnumberとして返してください。

name: string(必須)と、"Hello"をデフォルト値とするtimeOfDay: string?を受け取るformatGreetingという名前の関数を作成してください。"[timeOfDay], [name]!"stringとして返してください。

weight: numberdistance: number(どちらも必須)、およびデフォルト値をfalseとするexpedited: boolean?を受け取るcalculateShippingという名前の関数を作成してください。この引数には明示的なnilチェックを使用してください!(weight * 0.5) + (distance * 0.1)を計算し、expeditedがtrueの場合は結果に2を掛けてください。numberを返してください。

次の関数を呼び出して出力してください。それぞれ1行ずつ出力します。

  1. calculateTax(100)
  2. calculateTax(200, 0.08)
  3. formatGreeting("Alice")
  4. formatGreeting("Bob", "Good morning")
  5. calculateShipping(5, 100)
  6. 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つの結果を出力する
quiz icon腕試し

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

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

自分で練習してみよう: Luaオンラインコンパイラ