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 が偽(falsy)であるために機能します — nil or "Hello""Hello" に評価されます。この行ののち、チェッカーは greeting がもはや nil になり得ないことを認識します。

Lua から知られている注意点が 1 つあります:orfalse も置き換えてしまいます!boolean? パラメーターの場合、flag = flag or true は明示的な(explicit)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 という名前の function を作成してください。税額(price * rate)を number として return します。

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

weight: numberdistance: number(ともに必須)と、false をデフォルト値とする expedited: boolean? を受け取る calculateShipping という名前の function を作成してください — これについては明示的な nil check を使用してください!(weight * 0.5) + (distance * 0.1) を計算し、expedited が true の場合は結果に 2 を掛けます。numberreturn します。

それぞれを改行して呼び出し、print してください:

  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入門のすべてのレッスン