C# | 1 日 60 分 × 7 日アプリ学習:超初級編

Web APP C#
スポンサーリンク

6日目のゴール

6日目のテーマは
「C# で“処理をひとかたまりとして名前をつける”感覚をつかむこと」 です。

昨日までは「データをまとめる(配列)」でした。
今日は「処理をまとめる」=メソッド(関数)です。

「同じような処理を何度も書いているな…」と感じたら、
そこにメソッドを切り出すタイミングが来ています。


メソッドは「処理に名前をつけたもの」

まずは一番シンプルなメソッド

C# のメソッドは、ざっくり言うとこういう形です。

戻り値の型 メソッド名(引数のリスト)
{
    // やりたい処理
}
C#

まずは「あいさつを表示するだけ」のメソッドを作ってみます。

using System;

class Program
{
    static void Main(string[] args)
    {
        SayHello();
        SayHello();
    }

    static void SayHello()
    {
        Console.WriteLine("こんにちは!");
    }
}
C#

ここでのポイントは二つです。

Main の外に static void SayHello() という「処理のかたまり」を定義していること
Main の中から SayHello(); と書いて、その処理を呼び出していること

SayHello という名前をつけたことで、
「この一行で“あいさつ処理”が実行される」と読めるようになります。


引数つきメソッドで「違うデータに同じ処理」をする

名前を変えてあいさつする

同じ「あいさつ」でも、
人によってメッセージを変えたいとします。

そのときに使うのが「引数」です。

using System;

class Program
{
    static void Main(string[] args)
    {
        SayHello("太郎");
        SayHello("花子");
        SayHello("次郎");
    }

    static void SayHello(string name)
    {
        Console.WriteLine("こんにちは、" + name + " さん!");
    }
}
C#

ここで深掘りしたいのは、この部分です。

static void SayHello(string name)
…「string 型の引数 name を受け取るメソッド」

SayHello("太郎");
… 呼び出し側から “太郎” という値を渡している

メソッドの中では、
name を普通の変数のように使えます。

「処理は同じだけど、使うデータだけ変えたい」
というときに、引数はものすごく役に立ちます。


戻り値つきメソッドで「計算結果を返す」

足し算メソッドを作る

今度は、「計算して結果を返す」メソッドを作ってみます。

using System;

class Program
{
    static void Main(string[] args)
    {
        int result1 = Add(3, 5);
        int result2 = Add(10, 20);

        Console.WriteLine("3 + 5 = " + result1);
        Console.WriteLine("10 + 20 = " + result2);
    }

    static int Add(int a, int b)
    {
        int sum = a + b;
        return sum;
    }
}
C#

ここでのキーワードは「戻り値」です。

static int Add(int a, int b)
…「int 型の結果を返す Add メソッド」

return sum;
…「このメソッドの“答え”として sum を返す」

呼び出し側では、

int result1 = Add(3, 5);

と書くことで、
「Add(3, 5) の結果(8)を result1 に入れる」
という意味になります。

メソッドは「処理に名前をつける」だけでなく、
「計算の“関数”として結果を返す」役割も持てます。


戻り値なし(void)と戻り値ありの違い

「何かするだけ」と「結果を返す」

ここまでで、二種類のメソッドが出てきました。

画面に表示するだけのメソッド:

static void SayHello(string name)
{
    Console.WriteLine("こんにちは、" + name + " さん!");
}
C#

計算して結果を返すメソッド:

static int Add(int a, int b)
{
    int sum = a + b;
    return sum;
}
C#

void は「何も返さない」という意味です。
「画面に表示する」「ログを出す」など、
“やって終わり”の処理は void で書くことが多いです。

一方、「計算して結果を使いたい」場合は、
intdouble などの型を戻り値として指定します。


配列+メソッドで「平均計算」をきれいにする

昨日のコードをメソッド化してみる

5日目でやった「配列の平均」を、メソッドにしてみます。

using System;

class Program
{
    static void Main(string[] args)
    {
        int[] scores1 = { 80, 90, 75, 60 };
        int[] scores2 = { 100, 95, 80 };

        double avg1 = CalcAverage(scores1);
        double avg2 = CalcAverage(scores2);

        Console.WriteLine("1つ目の平均: " + avg1);
        Console.WriteLine("2つ目の平均: " + avg2);
    }

    static double CalcAverage(int[] scores)
    {
        int sum = 0;

        for (int i = 0; i < scores.Length; i++)
        {
            sum = sum + scores[i];
        }

        double average = (double)sum / scores.Length;
        return average;
    }
}
C#

ここでのポイントは、「役割の分担」です。

Main
…「どの配列の平均を取りたいか」を決める場所
… 結果を表示する場所

CalcAverage
…「配列を渡されたら、その平均を計算して返す」ことだけに集中

同じ「平均計算」を、
scores1 にも scores2 にも使い回せています。

「同じ処理を何度も書かない」
これがメソッドの一番大きな価値です。


「名前のつけ方」がメソッドの読みやすさを決める

メソッド名は“何をするか”が分かるように

メソッド名は、
「この処理は何をするのか」が一目で分かるようにつけるのがコツです。

例えば、

CalcAverage … 平均を計算する
PrintResult … 結果を表示する
IsPassed … 合格かどうかを判定する(bool を返すイメージ)

など、「動詞+目的語」っぽくすると読みやすくなります。

逆に、DoItFunc1 のような名前だと、
「何をするのか」がコードを開かないと分からなくなります。

メソッドは「処理に名前をつける道具」なので、
その名前を丁寧につけることが、
コード全体の読みやすさに直結します。


6日目のミニアプリ:簡易「合格判定」システム

点数配列から「合格かどうか」を判定する

次のルールで合格判定をしてみます。

平均点が 60 点以上なら「合格」
それ未満なら「不合格」

これをメソッドを使って書いてみます。

using System;

class Program
{
    static void Main(string[] args)
    {
        int[] scoresA = { 70, 80, 65 };
        int[] scoresB = { 50, 40, 55 };

        Judge("Aさん", scoresA);
        Judge("Bさん", scoresB);
    }

    static void Judge(string name, int[] scores)
    {
        double average = CalcAverage(scores);

        Console.WriteLine(name + " の平均点は " + average + " 点です。");

        if (average >= 60)
        {
            Console.WriteLine("結果:合格");
        }
        else
        {
            Console.WriteLine("結果:不合格");
        }

        Console.WriteLine("----------");
    }

    static double CalcAverage(int[] scores)
    {
        int sum = 0;

        for (int i = 0; i < scores.Length; i++)
        {
            sum = sum + scores[i];
        }

        double average = (double)sum / scores.Length;
        return average;
    }
}
C#

ここでの構造を整理すると、

CalcAverage
…「配列の平均を計算して返す」だけを担当

Judge
…「名前と点数配列を受け取り、平均を出して合否を表示する」

Main
…「誰を判定するか」を決めて、Judge を呼ぶ

という役割分担になっています。

メソッドを使うと、
「どこで何をしているか」がとても見通しやすくなります。


6日目で絶対に押さえておきたいポイント

メソッドの“型”を体で覚える

戻り値なし(void)のメソッド:

static void メソッド名(引数...)
{
    // 何かする(表示など)
}
C#

戻り値ありのメソッド:

static 戻り値の型 メソッド名(引数...)
{
    // 計算など
    return 結果;
}
C#

呼び出し方:

メソッド名(引数...);          // void のとき
 変数名 = メソッド名(...);  // 戻り値ありのとき
C#

そして何より大事なのは、

「同じ処理を何度も書いている」と感じたら、
そこをメソッドに切り出せないか考えてみることです。


もし余裕があればやってみてほしいこと

自分用の「メッセージメソッド」を作る

例えば、

「区切り線を表示するメソッド」
「タイトルを表示するメソッド」
「今日の勉強時間を表示するメソッド」

などを作って、Main の中から何度か呼んでみてください。


6日目のまとめ

1〜5日目で「データの扱い方」を学び、
6日目で「処理のまとめ方=メソッド」を学びました。

変数・配列で「値」を整理し、
メソッドで「処理」を整理する。

この二つがそろうと、
コードは「ただ動くもの」から
「意味のある部品が組み合わさったもの」に変わっていきます。

7日目は、ここまでの要素
(変数・if・for・配列・メソッド)をまとめて、
小さな「アプリっぽいもの」を一つ形にしていくイメージです。

タイトルとURLをコピーしました