省略可能な引数
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 26/80。
通常の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」という意味です。呼び出し側は文字列を渡すか、引数を完全に省略できます。?のないパラメーターは必須であり、チェッカーはそれらを省略した呼び出しに警告します。
関数内では、省略可能なパラメーターがnilの可能性があるため、使う前に確認してください。if title then ... endが標準的なパターンです。確認を省略してnilを文字列に連結すると、Luaでいつも起きていたのと同じ実行時エラーが発生します。型チェッカーはその前に警告してくれます。
チャレンジ
簡単表示名が省略可能なプロフィール関数を書きましょう。
local function createUserProfile(username: string, displayName: string?): stringを書きましょう。displayNameが指定されている場合は`Profile: {displayName} (@{username})`を返し、それ以外の場合は`Profile: @{username}`を返しましょう。createUserProfile("john_doe", "John Doe")とcreateUserProfile("jane_smith")を出力しましょう。
Run Codeを押すと、出力にProfile: John Doe (@john_doe)とProfile: @jane_smithが表示されます。
自分で試してみよう
-- 1) createUserProfile(username: string, displayName: string?): string
-- 2) 表示名がある場合とない場合の両方で、それを出力する
Luau入門のすべてのレッスン
自分で練習してみよう: Luauオンラインコンパイラ