← SEARCHABLE ARCHIVE
C# · 2026-07-17

C# 基礎からマスターまで — 第2回

条件文、反復文、メソッドでフローを作成する

INTERACTIVE READING MODE →

本ブログ作成文は、講義を目指して製作されました。 また、作成された文章の情報も間違っている可能性がありますので、ご注意ください。

プログラムは値を保存するだけでは終わりません。 条件に応じて異なるコードを実行し、同じ操作を繰り返し、意味のある単位でメソッドを分割する必要があります。

条件文とswitch

string GetState(int health)
{
    if (health <= 0)
    {
        return "Dead";
    }

    return health < 30 ? "Danger" : "Normal";
}

int reward = rank switch
{
    "S" => 1000,
    "A" => 500,
    _ => 100
};

単純な二分岐はifが読みやすく、1つの値を複数の場合と比較するときはswitchがよく合います。 _は、前のどのパターンにも合わない残りのケースだ。

繰り返しドア

var damages = new[] { 10, 20, 15 };
int total = 0;

foreach (int damage in damages)
{
    if (damage <= 0)
    {
        continue;
    }

    total += damage;
}

foreachは要素を順番に読み取るのに便利です。 インデックスが必要な場合、または繰り返し範囲を直接制御する必要がある場合は、forを使用してください。

繰り返し文内でコレクションの要素を追加または削除すると、列挙が無効になる可能性があります。 削除する対象を別々に集めたり、後ろから巡回する方法が安全だ。

メソッドと早期返却

bool TryAttack(Player attacker, Monster target, out int damage)
{
    damage = 0;

    if (!attacker.IsAlive || !target.IsAlive)
    {
        return false;
    }

    damage = Math.Max(1, attacker.Attack - target.Defense);
    target.TakeDamage(damage);
    return true;
}

処理できない入力を最初に返すと、通常のフローのインデントが深まりません。 outパラメーターは、成功と計算結果を一緒に返すときに使用できます。

メソッド名は内部実装より呼び出す側の意図を示すべきである。 条件と反復が長くなったら、単に行数を減らさず、1つのメソッドが1つの責任しか持たないことを確認するほうが良い。