はじめに
いままで、たし算ひき算などの学習をしてきました。
計算式などの書き方を学習してきましたが、もっと効率の良い書き方があります。
関数と呼ぶものを使います。
関数とは
以下のようなコードを書いたことがあると思います。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
Number_device := class(creative_device):
var num1 : int = 5
var num2 : int = 10
OnBegin<override>()<suspends>:void=
Print("num1 + num2={num1+num2}")
Print("num1 x num2={num1*num2}")
このスクリプトに新しいコードを追加してみます。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
Number_device := class(creative_device):
var num1 : int = 5
var num2 : int = 10
OnBegin<override>()<suspends>:void=
Print("num1 + num2={num1+num2}")
Print("num1 x num2={num1*num2}")
Function1(5,10)
Function1(INT1 : int,INT2 : int) : void =
Print("new:num1 + num2 = {INT1 + INT2}")
Print("new:num1 x num2 = {INT1 * INT2}")
まったく同じ結果が出力されます。わかりやすくするために、新しく追加したコードの出力にnew:とつけています。
スクリプトを見ると、いつもと書き方が逆になっている印象を受けると思います。該当部分のみ抜き出してみます。
var num1 : int = 5
var num2 : int = 10
OnBegin<override>()<suspends>:void=
Print("num1 + num2={num1+num2}")
Print("num1 x num2={num1*num2}")
Function1(5,10)
Function1(INT1 : int,INT2 : int) : void =
Print("new:num1 + num2 = {INT1 + INT2}")
Print("new:num1 x num2 = {INT1 * INT2}")
Function1(~):void以降に計算式がかかれていて、Function1(5,10)というところで数値を指定しているような設計のようです。
Function1のことを関数と呼びます。上記のように、あらかじめ定めておいた計算式などを実行してくれるツールです。実行するときに使いたい定数を指定することもできます。Function1(5,10)のように書くわけです。
関数は、計算などで使う数値を”引数(ひきすう)“という入力値として扱い、そこから生まれた結果を”戻り値(もどりち)“という出力値として扱います。以下のように書くことができます。
[関数名]([引数名] : [引数の型], …) : [戻り値の型] =
[関数の処理]
さきほどのFunction1を見返します。書き方どおりの記述になっているようですが・・voidとはなんでしょうか。型というと、intとかfloatを思い出すと思いますが・・。
Function1(INT1 : int,INT2 : int) : void =
Print("new:num1 + num2 = {INT1 + INT2}")
Print("new:num1 x num2 = {INT1 * INT2}")
出力が必要ない場合は、[戻り値の型]として、voidを記述します。これはvoid型と呼ばれるものです。void 型は、型がないことを意味するものです。少しイレギュラーなコードでした。基本的なコードをみてます。
以下のスクリプトをごらんください。Function2,3を追加しています。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
Number_device := class(creative_device):
var num1 : int = 5
var num2 : int = 10
OnBegin<override>()<suspends>:void=
Print("num1 + num2={num1+num2}")
Print("num1 x num2={num1*num2}")
Function1(5,10)
Print("new2:num1 + num2 ={Function2(5,10)}")
Print("new2:num1 x num2 ={Function3(5,10)}")
Function1(INT1 : int,INT2 : int) : void =
Print("new:num1 + num2 = {INT1 + INT2}")
Print("new:num1 x num2 = {INT1 * INT2}")
Function2(INT3 : int,INT4 : int) : int =
num3 : int = INT3 + INT4
return num3
Function3(INT5 : int,INT6 : int) : int =
num4 : int = INT5 * INT6
return num4
こちらも実行すると同じ結果が出力されます。
Function2,3は書き方の通り、戻り値の型はintというものになっています。
では、returnとはなんでしょうか。returnが実行されると、戻り値を返して、関数の処理が終了します。戻り値は、1つしか指定することができません。以下のように書きます。
return [値]
その戻り値が来るところに書かれているのが、以下のコード達です。
Function1(5,10)
Print("new2:num1 + num2 ={Function2(5,10)}")
Print("new2:num1 x num2 ={Function3(5,10)}")
これは関数の呼び出しと呼ばれる書き方で、例えば
Function1(5,10)は引数がint型で2つあるため(5,10)と書きます。
ということで、正式な関数の呼び出しの書き方は
[関数名]([引数の値], …)
と書きます。戻り値をどのように出力させたいかによって、上記のようにPrintを使ったりするわけです。関数の呼び出しを記述したところが、戻り値に置き換わると認識していれば大丈夫です。
まとめ
いかがでしたでしょうか。
関数を使えば、スクリプトを整理しやすくもなるので、とても便利です。
ぜひいろいろアレンジして効果をお試しください。
参考動画
テキストだけでなく、動画を見ながらも学習してみたい方にオススメの動画をご紹介しております。
クリエナビではYouTubeチャンネルも運営しています。
今回は、関数に関するクリエナビチャンネルからの動画をご紹介します。
良ければご覧ください。
ご質問やご感想はお気軽にコメント欄まで!