こんにちは、ゆたんぽです。
今回は、C#の関数について詳しく記事を書いていきます。
C#において、関数は特定の処理を行うプログラムの単位であり、複数の場所で同じ処理を繰り返して書く必要がなくなります。関数を使用することで、コードの再利用性や保守性を向上させることができます。
関数の定義
関数は、以下のように定義します。
修飾子 戻り値の型 関数名(引数の型 引数名, 引数の型 引数名, ...) {
// 処理
return 戻り値;
}
修飾子は、publicやprivateなどのアクセス修飾子を指定します。簡単に言うと、publicはいろいろな場所からアクセスできますが、privateは自分自身のクラスからしかアクセスできなくなります。
戻り値の型は、関数が返す値の型を指定します。戻り値がない場合は、voidを指定します。
関数名は、関数を識別するための名前を指定します。引数の型と引数名は、関数に渡される引数の型と名前を指定します。
関数の呼び出し
関数を呼び出す場合は、以下のように記述します。
戻り値の型 変数名 = 関数名(引数1, 引数2, ...);
上記の処理で、関数を呼び出して処理を行い、その処理の結果を変数に格納することができます。
変数名には、関数の戻り値が格納されます。
関数名には、呼び出す関数の名前を指定します。
引数には、関数に渡す引数の値を指定します。
戻り値
関数が返す値は、return文で指定します。以下は、戻り値がint型の場合の例です。
int Add(int a, int b) {
int sum = a + b;
return sum;
}
上記のようにすることで引数で指定したaとbを足し算した結果(sum)を返すことができます。
int result = Add(1,2)を処理すると、resultに3が返却されます。
オーバーロード
オーバーロード(overloading)は、同じ名前の関数に異なる引数を与えることで、同じ目的を持った関数を複数定義することができるC#の機能です。オーバーロードを用いることで、コードの可読性を向上させることができます。
オーバーロードをするには、同じ名前の関数を複数定義します。ただし、引数の数や型が異なっている必要があります。引数の型が同じであっても、引数の数が異なっていればオーバーロードが可能です。
以下は、オーバーロードした関数の例です。
int Add(int a, int b) {
return a + b;
}
float Add(float a, float b) {
return a + b;
}
上記の例では、Add
という関数名でint
型の引数2つを取る関数と、float
型の引数2つを取る関数が定義されています。
引数にintを指定すると上の関数が走って、floatでは下の処理が走るようになります。
オーバーロードを行う場合には、以下の点に注意が必要です。
- オーバーロードされる関数名は、引数の型や数によって区別される必要があるため、関数名が同じでも引数の数や型が同じにならないように注意が必要です。
- 引数の型によっては、オーバーロードができない場合があります。たとえば、
int
型とlong
型は互換性があるため、int
型の引数1つを取る関数とlong
型の引数1つを取る関数をオーバーロードすることはできません。 - オーバーロードされる関数は、呼び出し時に引数の型や数によって適切な関数が呼ばれるため、プログラムのパフォーマンスに影響を与える場合があります。
引数の渡し方
関数に引数を渡す方法は、値渡しと参照渡しの2種類あります。
値渡しの場合、関数に渡された引数の値がそのまま関数内でコピーされます。この場合、関数内で引数の値を変更しても、元の値には影響を与えません。
参照渡しの場合、関数に渡された引数のアドレスがそのまま関数内に渡されます。この場合、関数内で引数の値を変更すると、元の値にも影響が与えられます。
以下は、参照渡しの例です。
void Swap(ref int a, ref int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10;
int y = 20;
Swap(ref x, ref y);
Console.WriteLine(x); // 20
Console.WriteLine(y); // 10
return 0;
}
上記のように、10で渡したXの引数の値が20に、20で渡したYの引数の値が10に代わっていることがわかると思います。
これを利用することで渡した引数を変えたり、複数の結果を返してもらうことができるのでよく利用します。
スコープ
関数内で定義された変数は、その関数内でのみ有効です。このように、変数が有効な範囲をスコープと呼びます。
以下は、スコープの例です。
void Test() {
int x = 10;
Console.WriteLine(x); // 10
}
int main() {
Console.WriteLine(x); // エラー: 'x' は存在しません。
return 0;
}
関数内で定義された変数は、その関数が呼び出されるたびに再定義されます。
つまり、関数内で定義された変数は、関数内でのみ有効であり、関数の呼び出しごとに新しい変数が生成されます。
まとめ
以上が、C#での関数の定義や呼び出し、戻り値の扱い、オーバーロードや引数の渡し方、スコープなど、基本的な関数に関する内容になります。
オーバーロードとか忘れることもあると思うので思い出すのに使ってください。