・p.058「メソッドとオブジェクト」から
提出フォロー: ミニ演習 mini057.cs
・例:(int)'A' ⇒ 文字'A'の文字コードである65になる(10進数に変換される) ・例:(char)66 ⇒ 文字コード66である文字'B'になる ・上記を試して、結果を表示しよう ・また、文字コードを16進数(前に0xを付ける)で与えてみよう
作成例
using UnityEngine;
public class mini057 : MonoBehaviour {
void Start() {
Debug.Log((int)'A'); //65(10進数)、16進数41
Debug.Log((char)66); //'B'(10進数66)
Debug.Log((char)0x42); //'B'(16進数42)
}
}
p.058 メソッドとオブジェクト:引数と戻り値
・メソッド:0個以上の情報を受け取り、動作し、0または1個の情報を返す仕組みで、C言語などにおける関数(ファンクション)と同様のもの ・この「受け取る情報」を引数(パラメータ)、「返す情報」を戻り値(返却値)という ・なお、Debug.LogはUnityが提供しているメソッドで、引数には表示したい情報を指定する。戻り値は0個(無し)となっている。 ・Debug.Log(引数)となっている通り、メソッドの引数はカッコ内に記述し、2個以上の場合はカンマで区切る。 ・また、Unityが提供しているメソッドに平方根を計算してくれる Mathf.Sqrt()メソッドがあり、引数は単精度実数、 戻り値も単精度実数(float型)。 ・メソッドの戻り値はそのまま表示や処理したり、式の一部として用いることが可能 例: 変数 = Mathf.Sqrt(16) + 1.0; //16の平方根4.0に1.0を加えた結果を変数に代入 ・最大値を返すMathf.Max()メソッドがあり、引数はint型またはfloat型で個数は可変、戻り値はint型またはfloat型。 ・Chap1_12_1では、int型の引数を4個与えて、int型の戻り値を得ている。 ・また、変数の初期化における初期値をメソッドの戻り値にすることもできるので、初期化においてメソッド内の処理を実行できる
アレンジ演習:p.059 Chap1_12_1.cs
・上の例「変数 = Mathf.Sqrt(16) + 1.0;」を適切な変数型を指定して追記しよう。 ⇒ 1.0はdouble型なので、float型 + double型で、変数はdouble型にする ・また、この変数値を表示しよう。
作成例
using UnityEngine;
public class Chap1_12_1 : MonoBehaviour {
void Start() {
int value = Mathf.Max(10, 40, 20, 30); //メソッドの戻り値で初期化
Debug.Log(value);
//【以下追加】
double d = Mathf.Sqrt(16) + 1.0; //float型 + double型でdouble型になる
Debug.Log(d + " 型は" + d.GetType()); //5 型はSystem.Double
//【以下参考】
float f = Mathf.Sqrt(16) + 1.0f; //float型 + float型でfloat型になる
Debug.Log(f + " 型は" + f.GetType()); //5 型はSystem.Single
}
}
補足:Unityが提供するメソッドの情報を得る方法
・Unityのリファレンスでオフィシャル情報を得ることができるが、VSでも要約情報が得られる ・なお、入力中にもヒントが得られるが、未入力部分をVSが推測した結果になるので、望んでいない情報になることもある
補足:メソッドのオーバーロードについて
・Mathf.Sqrt()メソッドは引数、戻り値共にfloat型のみと定義されている
・しかし、C#などのオブジェクト指向言語ではオーバーロードが可能
・オーバーロードとは「同じ名前のメソッドに型や個数&順序が異なる引数を与えると動作を変えられる」こと
・Mathf.Max()メソッドにはオーバーロードが4つ定義されている
①引数が2個のfloat型であれば単精度実数における最大値を得て、float型の戻り値として返す
②引数の型が全てfloat型であれば単精度実数における最大値を得て、float型の戻り値として返す
③引数が2個のint型であれば整数における最大値を得て、int型の戻り値として返す
④引数の型が全てint型であれば整数における最大値を得て、int型の戻り値として返す
・どれが呼び出されるかは呼び出し時の引数によって決まる
・今回の「Mathf.Max(10, 40, 20, 30)」では④が呼び出され、int型の戻り値40が返されたことがわかる。
・なお、オーバーロードとして定義されているパターンにあてはまらない呼び出し方をすると文法エラーになる
例:Mathf.Max(10.1, 40.4, 20.2, 30.1); //double型なのでエラー
例:Mathf.Max(10.1, 40.4, 20.2, 30.1); //double型なのでエラー
例:Mathf.Max(10.1f, 40.4f, 20.2f, 30.1f); //float型なのでOK
例:Mathf.Max('A', 'B', 'a', 'b'); //char型はint型に暗黙変換できるのでOK
例:Mathf.Max(10, 10.1f); //10はint型だがfloat型に暗黙変換し、戻り値はfloat型
・なお、プログラマが自前のメソッドを記述でき、オーバーロードを定義することも可能
ミニ演習 mini060.cs
・パブリック変数で4個の整数値(int型)を受け取り、最大値を表示しよう
作成例
using UnityEngine;
public class mini060 : MonoBehaviour {
public int a, b, c, d; //パブリック変数
void Start() {
Debug.Log(Mathf.Max(a, b, c, d)); //最大値を得て表示
}
}