C#のメソッドは「行って、仕事をして、戻る」で理解しよう
C#で初めてメソッドを学ぶとき、多くの人がつまずくのは、void
や return の書き方だけではありません。
本当に難しいのは、プログラムが今どこを実行していて、次にどこへ移るのかを頭の中で思い浮かべることです。
そこで今回は、ブラウザの画面遷移をアニメーション教材のように使い、メソッドの実行の流れを理解してみます。
HTMLのコードを読む必要はありません。見るのは、画面が「移動する」「材料を渡す」「結果を持って戻る」という3つの動きだけです。
この記事の画面遷移は、メソッドの動きを理解するためのたとえです。実際のWebページとC#のメソッドが、同じ仕組みで動いているわけではありません。
まずはメソッドを「別の作業場所」と考える
メソッドを呼び出すと、プログラムの実行位置は呼び出し元からメソッドへ移ります。
メソッド内の処理が終わると、実行位置は呼び出し元へ戻り、その次の行から処理が続きます。
最初は、次のように考えてみましょう。
メソッドを呼び出す:別の作業場所へ行く
引数を渡す:作業に必要な材料を持って行く
returnする:完成した結果を持ち帰る
この3つが見えるようになると、メソッドのコードを追いやすくなります。

1.引数なし・戻り値なし:手ぶらで行って戻る
ブラウザ上のリンクを押すと、別の画面へ移動します。移動先ではメッセージを表示し、処理が終わります。
この動きは、引数も戻り値もない単純なメソッドのイメージに使えます。
static void Jump()
{
Console.WriteLine("別の作業場所に来ました");
}
呼び出す側は、次のように書きます。
Jump();
Jump(); が実行されると Jump
メソッドへ移動し、メッセージを表示します。処理が終わると、呼び出した場所へ戻ります。
受講生には、次のように伝えるとよいでしょう。
手ぶらで作業場所へ行き、そこで仕事をして戻ってきます。
2.引数あり・戻り値なし:材料を渡して仕事をしてもらう
次は、ブラウザで血液型を選び、ボタンを押す場面を考えます。
選んだ「A型」という情報が次の画面へ渡され、その情報を使って診断結果が表示されます。
static void ShowFortune(string blood)
{
Console.WriteLine($"{blood}型のあなたは……几帳面タイプ!");
}
呼び出すときは、丸括弧の中に渡したい値を書きます。
ShowFortune("A");
ここでは、"A"
が引数です。呼び出された側では、blood
という仮引数で受け取ります。
"A":実際に渡す値(引数)blood:渡された値を受け取る変数(仮引数)
このメソッドは、受け取った材料を使って画面に表示します。しかし、呼び出し元へ値は返しません。そのため戻り値の型は
void です。
「A」という荷物を渡しました。向こうでは、その荷物を使って表示してから戻ってきます。
3.引数あり・戻り値あり:材料を渡して結果を持ち帰る
今度は「A型」という材料を渡し、作成された診断結果を呼び出し元で受け取ります。
static string GetFortune(string blood)
{
string result = $"{blood}型のあなたは……几帳面タイプ!";
return result;
}
呼び出し元では、戻ってきた文字列を変数に代入します。
string myResult = GetFortune("A");
Console.WriteLine(myResult);
処理の流れは次のとおりです。
GetFortune("A")を呼び出す"A"がbloodに渡される- メソッド内で診断結果を作る
return result;で文字列を返す- 返された文字列が
myResultに入る - 呼び出し元で
myResultを表示する
ここで大切なのは、GetFortune("A")
自体が、最終的には返された文字列に置き換わるように考えることです。
string myResult = GetFortune("A");
実行後のイメージは、次のようになります。
string myResult = "A型のあなたは……几帳面タイプ!";
「A」という材料を渡し、向こうで作った診断結果を持って帰って、
myResultで受け取ります。
まずは、ブラウザ上でメソッドの動きを体験してみましょう。
3つのメソッドを1つのプログラムで確認しよう
Visual Studioで試す場合は、次のコードを使えます。
namespace MethodFlowSample
{
internal class Program
{
static void Main(string[] args)
{
Jump();
ShowFortune("A");
string myResult = GetFortune("A");
Console.WriteLine(myResult);
}
static void Jump()
{
Console.WriteLine("別の作業場所に来ました");
}
static void ShowFortune(string blood)
{
Console.WriteLine($"{blood}型のあなたは……几帳面タイプ!");
}
static string GetFortune(string blood)
{
string result = $"{blood}型のあなたは……几帳面タイプ!";
return result;
}
}
}
コードを上から眺めるだけでは、実行の流れをつかみにくいかもしれません。そこで、Visual Studioのデバッガを使います。
F11キーでメソッドの中へ入ってみよう
Main メソッド内の Jump();
の行にブレークポイントを置き、デバッグを開始します。
停止したら、F11キーの「ステップ イン」を1回ずつ押してください。
Jump(); から Jump
メソッドの中へ黄色い矢印が移動します。これは、ブラウザでリンク先の画面へ移動したときのイメージです。
メソッドの処理が終わると、黄色い矢印は Main
メソッドへ戻ります。そして、呼び出し行の次の行から実行が続きます。
次に、GetFortune("A") でも同じ動きを確認します。
- 呼び出し元から
GetFortuneの中へ入る bloodに"A"が入っていることを確認するresultに診断結果が入るreturn result;で結果を返す- 呼び出し元へ戻り、
myResultに結果が入る
ウォッチウィンドウやマウスポインターで変数の中身も確認すると、「材料を渡して、成果物を受け取る」という動きがさらに分かりやすくなります。
F10とF11の違い
デバッグ中は、F10とF11を使い分けます。
F10(ステップ オーバー):メソッドを1つの処理として実行し、中には入らない
F11(ステップ イン):呼び出したメソッドの中へ入る
メソッドの実行順序を学ぶときは、まずF11を使いましょう。黄色い矢印が「呼び出し元→メソッド内→呼び出し元」と動く様子を観察できます。
ブラウザのたとえで押さえる3つの動き
| メソッドの種類 | ブラウザでのイメージ | C#で注目する部分 |
|---|---|---|
| 引数なし・戻り値なし | 手ぶらで移動し、仕事をして戻る | void Jump() |
| 引数あり・戻り値なし | 材料を渡し、向こうで使う | void ShowFortune(string blood) |
| 引数あり・戻り値あり | 材料を渡し、結果を持ち帰る | string GetFortune(string blood) と
return |
最初から文法用語をすべて暗記する必要はありません。
まずは、次の短い言葉で実行の流れをつかみましょう。
呼び出す:行く
引数:渡す材料
戻り値:持ち帰る結果
return:結果を返して元へ戻る
まとめ
メソッドを理解する第一歩は、コードの形を暗記することではなく、実行の流れを頭の中で再生できるようになることです。
ブラウザの画面遷移で「行く・渡す・持ち帰る」を体験した直後に、Visual StudioのF11キーで同じ流れを追うと、メソッド呼び出しが目に見える動きとしてつながります。
メソッドの中へ行き、仕事を終えて、呼び出した場所へ戻る。
まずはこの基本の往復を、黄色い矢印を追いながら確認してみてください。










ディスカッション
コメント一覧
まだ、コメントがありません