1. C#の関数/メソッド
もうC#でたくさんのコマンドを覚えたよね、だから結構複雑なプログラムも書けるようになったはず。10、20、30行くらいのコードなら、そんなに大きなプログラムじゃないよね?
でも100+行のプログラムになると、もう結構大きいし、コードを理解するのも大変になってくる。もっと簡単にたくさんのコードを書く・読む方法ってないのかな?
あるよ!それがメソッド(関数)なんだ。
じゃあ、メソッドって何?めっちゃ簡単に言うと、メソッドは「ユニークな名前を持つコマンドのグループ」だよ。つまり、いくつかのコマンドをまとめてグループ化して、名前を付けるだけ。それでメソッドの完成!
例えば、猫を描くコードがあるとするね:
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
これを実行するとこうなるよ:
|\__/,| (`\
|o_o |__ _) )
(____/ (_/
このコードをメソッドにまとめれば、好きなだけ猫を描けるようになるよ:
void WriteCat()
{
Console.WriteLine(" |\\__/,| (`\\");
Console.WriteLine(" |o_o |__ _) )");
Console.WriteLine(" (____/ (_/ ");
}
//猫を3匹描く
WriteCat();
WriteCat();
WriteCat();
プログラムを実行すると、WriteCat()を呼ぶたびに、WriteCat()の中のコマンドが全部実行されるよ。いくつかのコマンドをまとめて新しいコマンド(メソッド)を作ったって感じ!
関数の意味:
- プログラムをパーツに分けて、それぞれが自分の仕事をするようにできる。
- 再利用が超ラク:一度書けば何回でも使える。
- バグが減る:関数の中のバグは一箇所直せばOK。
- 複雑な処理に「名前」をつけられるから、コードがめっちゃ読みやすくなる。
用語:関数、メソッド、プロシージャ
C#では関数とメソッドはだいたい同じ意味だけど、ちょっとした違いもあるよ。
- メソッド — クラスやオブジェクトに属する関数(C#ではほとんど全部メソッド)。
- プロシージャ — 値を返さない関数(voidメソッド)。
- 関数 — 広い意味で、呼び出せる名前付きのプログラムの一部。
公式にはC#では全部メソッドって呼ぶけど、たまに「関数」って言葉が出てきてもビビらないでね!
2. メソッド宣言の構文:分解してみよう
一番シンプルな関数、「Hello, World!」の出力をメソッドにしてみるよ:
using System;
class Program
{
static void Main()
{
PrintHello();
}
static void PrintHello() // Hello, World!を出力
{
Console.WriteLine("Hello, World!");
}
}
構文の分解:
| パーツ | 例 | 説明 |
|---|---|---|
| 修飾子 | |
このメソッドがクラスに属することを示す(詳しくは後で) |
| 戻り値の型 | |
このメソッドが何も返さないことを示す |
| メソッド名 | |
呼び出すときのメソッドの名前 |
| パラメータ | |
引数(空なら引数なし) |
| メソッド本体 | |
メソッドを呼んだときに実行されるコード |
イメージ:
メソッドはコーヒーマシンみたいなもの:お金(引数)を入れて、ボタン(メソッド呼び出し)を押すと、マシンがコーヒーを作る(メソッド本体)、そして結果(戻り値)を出す — もしくはvoidメソッドなら何も返さない!
3. メソッドの呼び出し方
メソッドを呼ぶのは、名前と丸カッコだけでOK:
PrintHello(); // 引数なしメソッド
int sum = Add(2, 3); // 引数と戻り値ありメソッド
重要:メソッドは宣言した後(もしくはコードの上の方に宣言されてる場合、または同じクラス内の場合)じゃないと呼べないよ。
4. パラメータ付きメソッド
メソッドにはパラメータを渡せるよ。これでメソッドの動きを柔軟にカスタマイズできる。パラメータは、メソッドの変数みたいなもので、呼び出すときに値を渡す。パラメータはメソッドを作るときに指定するよ。
static void Greet(string name)
{
Console.WriteLine($"やっほー、{name}!");
}
// 使い方:
Greet("アリサ");
Greet("ボブ");
パラメータは、メソッドを呼ぶときに渡す値のことだよ。
| パーツ | 例 | 説明 |
|---|---|---|
| パラメータの型 | |
受け取る値の型 |
| パラメータ名 | |
メソッド内で使う名前 |
呼び出し例:
Greet("アリサ"); — nameには"アリサ"が入るよ。
複数パラメータ
カンマで区切れば複数のパラメータもOK:
static void PrintSum(int a, int b)
{
Console.WriteLine($"合計: {a + b}");
}
// 使い方:
PrintSum(5, 7); // 合計: 12
5. 値パラメータと参照パラメータ
関数のパラメータは普通の変数と同じで、他の変数と同じルールが適用されるよ。
だから覚えておいて:メソッドに配列を渡すときは参照を渡してるから、メソッドの中で配列の中身を変えられる。intやdoubleみたいな単純な型は値がコピーされるだけ。
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // 元の配列が変わる!
}
// 使い方:
int[] a = {1, 2, 3, 4, 5};
ZeroFirstGrade(a);
Console.WriteLine(a[0]); //0が出力される
実際にはこういうことが起きてるんだ:
static void ZeroFirstGrade(int[] grades)
{
grades[0] = 0; // 元の配列が変わる!
}
// 使い方:
int[] a = {1, 2, 3, 4, 5};
//ZeroFirstGrade(a);
int[] grades = a;
grades[0] = 0;
Console.WriteLine(a[0]); //0が出力される
GO TO FULL VERSION