CodeGym /コース /C# SELF /C#における関数(メソッド)入門

C#における関数(メソッド)入門

C# SELF
レベル 8 , レッスン 2
使用可能

1. C#の関数/メソッド

もうC#でたくさんのコマンドを覚えたよね、だから結構複雑なプログラムも書けるようになったはず。102030行くらいのコードなら、そんなに大きなプログラムじゃないよね?

でも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!");
    }
}
メソッドの宣言と呼び出し例

構文の分解:

パーツ 説明
修飾子
static
このメソッドがクラスに属することを示す(詳しくは後で)
戻り値の型
void
このメソッドが何も返さないことを示す
メソッド名
PrintHello
呼び出すときのメソッドの名前
パラメータ
()
引数(空なら引数なし)
メソッド本体
{ ... }
メソッドを呼んだときに実行されるコード

イメージ:
メソッドはコーヒーマシンみたいなもの:お金(引数)を入れて、ボタン(メソッド呼び出し)を押すと、マシンがコーヒーを作る(メソッド本体)、そして結果(戻り値)を出す — もしくはvoidメソッドなら何も返さない!

3. メソッドの呼び出し方

メソッドを呼ぶのは、名前と丸カッコだけでOK:

PrintHello(); // 引数なしメソッド

int sum = Add(2, 3); // 引数と戻り値ありメソッド

重要:メソッドは宣言した後(もしくはコードの上の方に宣言されてる場合、または同じクラス内の場合)じゃないと呼べないよ。

4. パラメータ付きメソッド

メソッドにはパラメータを渡せるよ。これでメソッドの動きを柔軟にカスタマイズできる。パラメータは、メソッドの変数みたいなもので、呼び出すときに値を渡す。パラメータはメソッドを作るときに指定するよ。

static void Greet(string name)
{
    Console.WriteLine($"やっほー、{name}!");
}

// 使い方:
Greet("アリサ");
Greet("ボブ");
パラメータ付きメソッド

パラメータは、メソッドを呼ぶときに渡す値のことだよ。

パーツ 説明
パラメータの型
string
受け取る値の型
パラメータ名
name
メソッド内で使う名前

呼び出し例:
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が出力される
配列を参照で渡すイメージ
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION