メソッドの考え方(トップレベルステートメントを使う)

初学からメソッドを学ぶとき、書籍からすんなり理解できる人はいいと思いますが、どうもわからない方は次のように考えるといいと思います

なぜ、わかりづかいと感じるかですが、1つの理由として、メソッドを使わなくても動作するプログラムが書けるから、わざわざ行数が多くなるし複雑なことをしなくてもと思いがあるからではないでしょうか

例として次のことをコンピュータにやらせるケースを考えてみます

整数の合計値を計算させたい

1から3までの整数の合計値を計算させたい

第1段階の学習

変数と算術演算子を学んだ段階のコードになります

int sum = 0;
sum = 1 + 2 + 3;
Console.WriteLine(sum);

表示結果

6

1から3までの整数の合計値を計算させたい
同じように5までの整数の合計値を計算させる

第1段階の学習

変数と算術演算子を学んだ段階のコードになります
まだ、楽勝ですね

int sum = 0;

sum = 1 + 2 + 3;
Console.WriteLine(sum);

sum = 1 + 2 + 3 + 4 + 5;
Console.WriteLine(sum);

表示結果

6
15

1から3までの整数の合計値を計算させたい
同じように5までの整数の合計値を計算させる
同じように100までの整数の合計値を計算させる

第1段階の学習

頑張ればできるでしょうが、嫌になりますね

第2段階の学習

100までの合計の計算を繰り返し(ループ)を使ってみました
どうでしょうか
この段階まで学習を進めた方は、第1段階の学びだけより効率よく作成できることが理解できると思います

int sum = 0;
sum = 1 + 2 + 3;
Console.WriteLine(sum);

sum = 1 + 2 + 3 + 4 + 5;
Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 100; i++)
{
    sum += i;
}

Console.WriteLine(sum);

表示結果

6
15
5050

1から3までの整数の合計値を計算させたい
同じように5までの整数の合計値を計算させる
同じように100までの整数の合計値を計算させる
同じように1000までの整数の合計値を計算させる
同じように1250までの整数の合計値を計算させる

第1段階の学習

頑張ってもできそうにないですね

第2段階の学習

次のようになりますかね
でも「同じようなことをこれ以上させないで」・・・行が増えていくだけなので
ってなってきている段階ですね

int sum = 0;
sum = 1 + 2 + 3;
Console.WriteLine(sum);

sum = 1 + 2 + 3 + 4 + 5;
Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 100; i++)
{
    sum += i;
}

Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 1000; i++)
{
    sum += i;
}

Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 1250; i++)
{
    sum += i;
}

Console.WriteLine(sum);

表示結果

6
15
5050
500500
781875

コードを変更してみます
3と5の計算も短いですが、繰り返しに変更してみます

int sum = 0;

for (int i = 1; i <= 3; i++)
{
    sum += i;
}

Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 5; i++)
{
    sum += i;
}

Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 100; i++)
{
    sum += i;
}

Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 1000; i++)
{
    sum += i;
}

Console.WriteLine(sum);

sum = 0;

for (int i = 1; i <= 1250; i++)
{
    sum += i;
}

Console.WriteLine(sum);

第3段階の学習(気付き)

どうでしょう
パターンが見えてきましたか?

正解は次のようになります
for文の条件式のところがまさに計算させたい数値になりますよね

これが気づければ、次の段階に進む準備ができたことになります

int sum = 0;

for (int i = 1; i <= (合計を出したい整数); i++)
{
    sum += i;
}

Console.WriteLine(sum);

第3段階の学習(新しい仕組み)

次にように記述すると、結果が得られるようになったらどんなに楽でしょうか

Sum(5);

表示結果

15

今回の問題を解く場合、次のようになります

Sum(3);
Sum(5);
Sum(100);
Sum(1000);
Sum(1250);

表示結果

6
15
5050
500500
781875

はい、この Sum(計算したい整数);がポイントですね
Console.WriteLine(表示したいデータ);と似ていますよね

では、このSum()という実体を作っていくことにしましょう

void Sum(int number)
{
    int sum = 0;

    for (int i = 1; i <= number; i++)
    {
        sum += i;
    }

    Console.WriteLine(sum);
}

解説

voidは、すべてのプログラム言語にあるわけではありません。C#では、このメソッドで完結する場合、このように記述しておきます(voidは英単語です。計算結果などを呼び出し元に戻すときの型になりますが、ここでは省略します)
Sumはメソッド名と呼ばれます。この名称は自分で考えていいです(変数名と同じようですね)
int number は引数と呼ばれます。int型の変数の宣言ですね。
この変数に値が代入されます。そして、以降のブロック内で使うことができるようになります

void Sum(int number)

続いて、ブロックが現れます
if文やfor文でも出てきたブロックです
囲われた中で変数が使えます(ローカル変数とも呼ばれます)

{
}

ブロックの中身は、前に見出した繰り返しパターンになりますね

まとめると次のようになります

Sum(3);
Sum(5);
Sum(100);
Sum(1000);
Sum(1250);

void Sum(int number)
{
    int sum = 0;

    for (int i = 1; i <= number; i++)
    {
        sum += i;
    }

    Console.WriteLine(sum);
}

ブレークポイントを使って、動作を確認

C#

Posted by hidepon