【8】関数から値を返す

キーワード return を使用すると、関数から情報を取得し、その関数を呼び出した場所で使用することができます。友達から別の部屋にある物を取ってくるように頼まれたら、取りに行ってその物を持ってくると思います。それと同じように、関数が呼び出されると、スクリプトは関数に行き、値を持って戻ります。

returnの仕組み

return は関数を終了させ、スクリプトを呼び出した場所まで戻ります。これにより、1つの関数の戻り値を2つ目の関数内で使用することができます。これを print() でテストします。

  1. 新しい関数を作成します。中に文字列値を持つローカル変数を追加します。
  2. 変数の下に、return と入力し、その後に変数の名前を入力します。
  3. 関数の下で、print() を使用して新しい関数を呼び出します。
  4. コードをテストして、返された文字列をOutputウィンドウに表示します。
local function sayHi()
    local printThis = "Hi"
    return printThis
end
-- Print returned value of sayHi
print(sayHi())

戻り値の格納

変数を使用して、関数を呼び出し、関数から受け取った値を格納することもできます。この場合、変数はmakeCake() を実行し、ゲーム内でケーキを受け取るために使用されます。

ケーキを受け取る

  1. 下記の makeCake() のコードをコピーします。
    アセットID「 34247194」(ケーキのモデル)を取得して、workspaceに配置し、そのオブジェクトを返すという関数です。
-- Cake making function
local function makeCake()
    -- Code for baking cake
    local assetId = 34247194
    local cake = game:GetService("InsertService"):LoadAsset(assetId)
    cake.Parent = workspace
    return cake
end
  1. その関数の下に、ケーキを受け取るための新しい変数を追加します。
-- Cake making function
local function makeCake()
    -- Code for baking cake
    local assetId = 34247194
    local cake = game:GetService("InsertService"):LoadAsset(assetId)
    cake.Parent = workspace
    return cake
end

local cake1 = makeCake()
  1. テストプレイします 中央辺りにケーキが出現したと思います。
  2. より多くのケーキを作成するには、「cake2=makeCake()」「cake3=makeCake()」と、呼び出すだけでよいのです。

複数の値を返す

戻り値は1つだけではなく、プレイヤーの勝ち、負け、引き分けの3つの値を返すこともできます。

  1. 勝ち、負け、引き分けの変数を持つカスタム関数を作成します。
  2. return の後に各変数を、それらをカンマで区切ります。
local function getWinRate()
    local wins = 4
    local losses = 0
    local ties = 1
    return wins, losses, ties
end
  1. return 文と同じように、呼ぶ方も同じ行に変数を作成します。 戻り値がそれぞれの変数に入ります。
local function getWinRate()
    local wins = 4
    local losses = 0
    local ties = 1
    return wins, losses, ties
end
 
local myWins, myLosses, myTies = getWinRate()
  1. 変数の値を表示して結果を確認します。
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が表示される場合、次の箇所を確認します。
・受け取った値の数が返された値と同じであることを確認します。
・返される値と受け取る値は、カンマで区切ります。
・関数に他の問題がないかを確認します。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です