6日目のゴールとテーマ
6日目のテーマは「メソッドでコードを“部品化”する」です。
ここまでで、入力・条件分岐・繰り返し・配列・クイズアプリの土台まで来ました。
今日はそこに「メソッド」という考え方を足して、
同じ処理を何度も使い回せるようにする
長くなってきたコードを、読みやすく分割する
「このメソッドは何をするか」を自分で設計して書けるようにする
ここを目指します。
一気に“プロっぽい書き方”に近づく日です。
メソッドとは何かをイメージでつかむ
「名前の付いた処理のまとまり」
まずはイメージからいきます。
今まで、Main メソッドの中に全部の処理を書いてきました。
static void Main(string[] args)
{
Console.WriteLine("処理A");
Console.WriteLine("処理B");
Console.WriteLine("処理C");
}
C#これが長くなってくると、どこで何をしているのか分かりにくくなります。
そこで、「処理のまとまり」に名前を付けて外に出すのがメソッドです。
static void DoSomething()
{
Console.WriteLine("処理A");
Console.WriteLine("処理B");
Console.WriteLine("処理C");
}
C#そして Main からは、こう呼び出します。
static void Main(string[] args)
{
DoSomething();
}
C#「DoSomething という名前の“処理の塊”を呼び出す」
これがメソッドの基本イメージです。
メソッドの基本形
いちばんシンプルなメソッドの形はこうです。
static void メソッド名()
{
// ここにやりたい処理を書く
}
C#static と void は、今は「おまじない」と思って構いません。
大事なのは「メソッド名」と「中身」です。
引数付きメソッドで「値を渡す」
「表示したいメッセージを渡す」メソッド
例えば、「メッセージを 1 行表示する」処理をメソッドにしたいとします。
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
C#ここで新しく出てきたのが「引数」です。
かっこの中の string message が引数です。
「このメソッドを呼ぶときに、文字列を 1 つ渡してください」という意味になります。
Main からはこう呼びます。
static void Main(string[] args)
{
PrintMessage("こんにちは");
PrintMessage("C# を勉強中です");
PrintMessage("メソッドを練習しています");
}
C#実行すると、3 行表示されます。
ここでの重要ポイントはこうです。
呼び出し側で渡した値が、メソッド側の引数(ここでは message)に入る
メソッドの中では、その引数を普通の変数のように使える
「メソッドに値を渡す」感覚をここでつかんでください。
戻り値付きメソッドで「結果を返す」
「足し算して結果を返す」メソッド
次は、「計算して結果を返す」メソッドを作ってみます。
static int Add(int a, int b)
{
int result = a + b;
return result;
}
C#ここで新しく出てきたのが「戻り値」です。
メソッド名の前の int が「戻り値の型」です。
このメソッドは「int 型の結果を返します」という宣言になっています。
return result; が「この値を呼び出し元に返す」という意味です。
Main からはこう使います。
static void Main(string[] args)
{
int x = Add(3, 5);
Console.WriteLine("3 + 5 = " + x);
int y = Add(10, 20);
Console.WriteLine("10 + 20 = " + y);
}
C#流れを言葉で追うと、
Add(3, 5) を呼び出す
a に 3、b に 5 が入る
result に 3 + 5 が入る
return result; で 8 が返る
呼び出し側の x に 8 が入る
という感じです。
戻り値があるメソッドの基本形
形としてはこう覚えておくと楽です。
static 戻り値の型 メソッド名(引数リスト)
{
// 何か処理をする
return 戻したい値;
}
C#戻り値がないときは void、あるときは int や string などの型を書きます。
クイズアプリの「1問分の処理」をメソッド化する
5日目のクイズを振り返る
昨日のクイズアプリでは、Main の中にこんな感じのコードがありました。
for (int i = 0; i < questions.Length; i++)
{
Console.WriteLine("第 " + (i + 1) + " 問");
Console.WriteLine(questions[i]);
Console.WriteLine("答えを入力してください:");
string userAnswer = Console.ReadLine();
if (userAnswer.ToLower() == answers[i].ToLower())
{
Console.WriteLine("正解!");
score = score + 1;
}
else
{
Console.WriteLine("不正解…");
Console.WriteLine("正解は: " + answers[i]);
}
Console.WriteLine();
}
C#この「1 問出して、正解かどうか判定して、スコアを増やす」部分を
メソッドに切り出してみます。
「1問出して、正解なら true を返す」メソッド
次のようなメソッドを作ります。
static bool AskQuestion(string question, string answer)
{
Console.WriteLine(question);
Console.WriteLine("答えを入力してください:");
string userAnswer = Console.ReadLine();
if (userAnswer.ToLower() == answer.ToLower())
{
Console.WriteLine("正解!");
Console.WriteLine();
return true;
}
else
{
Console.WriteLine("不正解…");
Console.WriteLine("正解は: " + answer);
Console.WriteLine();
return false;
}
}
C#ここでのポイントはこうです。
引数として「質問」と「正解」を受け取る
中で表示と入力と判定を全部やる
正解なら true、不正解なら false を返す
Main からはこう使えます。
int score = 0;
for (int i = 0; i < questions.Length; i++)
{
Console.WriteLine("第 " + (i + 1) + " 問");
bool isCorrect = AskQuestion(questions[i], answers[i]);
if (isCorrect)
{
score = score + 1;
}
}
Console.WriteLine("正解数: " + score + " / " + questions.Length);
C#「1 問分の処理」が AskQuestion にまとまったことで、
Main の中がかなりスッキリしました。
「役割ごとにメソッドを分ける」感覚をつかむ
表示用メソッドを作る
例えば、結果表示の部分もメソッドにできます。
static void ShowResult(int score, int total)
{
Console.WriteLine("=== 結果発表 ===");
Console.WriteLine("正解数: " + score + " / " + total);
double rate = (double)score / total * 100;
Console.WriteLine("正解率: " + rate + " %");
if (rate == 100)
{
Console.WriteLine("完璧です!");
}
else if (rate >= 60)
{
Console.WriteLine("なかなかいい感じです。");
}
else
{
Console.WriteLine("もう少し復習してみましょう。");
}
}
C#Main からは最後にこう呼ぶだけです。
ShowResult(score, questions.Length);
C#こうやって「役割ごとにメソッドを分ける」と、
Main は「全体の流れ」だけを書く場所になる
細かい処理は、それぞれのメソッドに任せられる
後から読み返したときに、どこで何をしているか分かりやすい
というメリットがあります。
6日目の仕上げ:メソッドを使ったクイズアプリ全体像
全体のコードイメージ
ここまでの内容をまとめると、クイズアプリはこんな構成にできます。
質問と答えの配列を用意する
Main では「ループで AskQuestion を呼ぶ」「最後に ShowResult を呼ぶ」
AskQuestion は「1 問出して true/false を返す」
ShowResult は「スコアを受け取って結果を表示する」
コードのイメージは次のようになります。
static void Main(string[] args)
{
string[] questions =
{
"C# はどの会社が作った言語?",
"C# のファイル拡張子は?",
"コンソールに出力するメソッドは?"
};
string[] answers =
{
"Microsoft",
".cs",
"Console.WriteLine"
};
int score = 0;
for (int i = 0; i < questions.Length; i++)
{
Console.WriteLine("第 " + (i + 1) + " 問");
bool isCorrect = AskQuestion(questions[i], answers[i]);
if (isCorrect)
{
score = score + 1;
}
}
ShowResult(score, questions.Length);
}
static bool AskQuestion(string question, string answer)
{
Console.WriteLine(question);
Console.WriteLine("答えを入力してください:");
string userAnswer = Console.ReadLine();
if (userAnswer.ToLower() == answer.ToLower())
{
Console.WriteLine("正解!");
Console.WriteLine();
return true;
}
else
{
Console.WriteLine("不正解…");
Console.WriteLine("正解は: " + answer);
Console.WriteLine();
return false;
}
}
static void ShowResult(int score, int total)
{
Console.WriteLine("=== 結果発表 ===");
Console.WriteLine("正解数: " + score + " / " + total);
double rate = (double)score / total * 100;
Console.WriteLine("正解率: " + rate + " %");
if (rate == 100)
{
Console.WriteLine("完璧です!");
}
else if (rate >= 60)
{
Console.WriteLine("なかなかいい感じです。");
}
else
{
Console.WriteLine("もう少し復習してみましょう。");
}
}
C#ここまで書けたら、「メソッドを使ってコードを整理する」という感覚はかなり身についています。
6日目のまとめ
今日のキーワードを整理します。
メソッド
名前の付いた処理のまとまり。何度でも呼び出せる“部品”。
引数
メソッドに渡す値。メソッド側では変数として扱える。
戻り値
メソッドから呼び出し元に返す値。型をメソッド名の前に書き、return で返す。
役割分担
Main は「全体の流れ」、メソッドは「具体的な処理」を担当させると読みやすくなる。
次の段階では、この「メソッドで部品化する」考え方が、
クラスやオブジェクト指向につながっていきます。
次回(7日目)への予告
7日目は、ここまでのコンソールアプリの知識を一度まとめて、
簡単な「ミニアプリ」を一つ完成させる日にします。
例えば、
診断アプリ
クイズアプリの強化版
メモ風のテキスト管理アプリ
などからテーマを決めて、「設計 → 実装 → 動作確認」まで通してやってみます。

