キーワード return を使用すると、関数から情報を取得し、その関数を呼び出した場所で使用することができます。友達から別の部屋にある物を取ってくるように頼まれたら、取りに行ってその物を持ってくると思います。それと同じように、関数が呼び出されると、スクリプトは関数に行き、値を持って戻ります。
returnの仕組み
return は関数を終了させ、スクリプトを呼び出した場所まで戻ります。これにより、1つの関数の戻り値を2つ目の関数内で使用することができます。これを print() でテストします。
- 新しい関数を作成します。中に文字列値を持つローカル変数を追加します。
- 変数の下に、return と入力し、その後に変数の名前を入力します。
- 関数の下で、print() を使用して新しい関数を呼び出します。
- コードをテストして、返された文字列をOutputウィンドウに表示します。
local function sayHi()
local printThis = "Hi"
return printThis
end
-- sayHiの戻り値を表示
print(sayHi())
戻り値の格納
変数を使用して、関数を呼び出し、関数から受け取った値を格納することもできます。この場合、変数はmakeCake() を実行し、ゲーム内でケーキを受け取るために使用されます。
ケーキを受け取る
- 下記の makeCake() のコードをコピーします。
アセットID「 34247194」(ケーキのモデル)を取得して、workspaceに配置し、そのオブジェクトを返すという関数です。
-- ケーキを作る
local function makeCake()
-- Code for baking cake
local assetId = 34247194
local cake = game:GetService("InsertService"):LoadAsset(assetId)
cake.Parent = workspace
return cake
end
- その関数の下に、ケーキを受け取るための新しい変数を追加します。
-- ケーキを作る
local function makeCake()
-- アセットからケーキを取得
local assetId = 34247194
local cake = game:GetService("InsertService"):LoadAsset(assetId)
cake.Parent = workspace
return cake
end
local cake1 = makeCake()
- テストプレイします。 中央辺りにケーキが出現したと思います。
- より多くのケーキを作成するには、「cake2=makeCake()」「cake3=makeCake()」と、呼び出すだけでよいのです。
複数の値を返す
戻り値は1つだけではなく、プレイヤーの勝ち、負け、引き分けの3つの値を返すこともできます。
- 勝ち、負け、引き分けの変数を持つカスタム関数を作成します。
- return の後に各変数を、それらをカンマで区切ります。
local function getWinRate()
local wins = 4
local losses = 0
local ties = 1
return wins, losses, ties
end
- return 文と同じように、呼ぶ方も同じ行に変数を作成します。 戻り値がそれぞれの変数に入ります。
local function getWinRate()
local wins = 4
local losses = 0
local ties = 1
return wins, losses, ties
end
local myWins, myLosses, myTies = getWinRate()
- 変数の値を表示して結果を確認します。
local function getWinRate()
local wins = 4
local losses = 0
local ties = 1
return wins, losses, ties
end
local myWins, myLosses, myTies = getWinRate()
print("Your wins, losses, and ties are: " .. myWins .. " , " .. myLosses .. " , " .. myTies)
Nilが返された場合のトラブルシューティング
Nilは、何かが見つからないか、存在しないことを意味します。期待される出力の代わりにnilが表示される場合、次の箇所を確認します。
・受け取った値の数が返された値と同じであることを確認します。
・返される値と受け取る値は、カンマで区切ります。
・関数に他の問題がないかを確認します。