Skip to content

7. 同じことを何度も書かない

次のような言葉があります。

繰り返しを避けよ

(Don't Repeat Yourself)

Andy Hunt, Dave Thomas The Pragmatic Programmer

これはDRY原則と呼ばれています。あなたのコードの中に、同じコードをいくつもコピペしたような箇所はありませんか?単に冗長なだけでなく、もし修正する場合、その全てを探して修正しなければならず、修正漏れがあればバグになります。複数の場所で使われるロジックをメソッドとしてまとめるなど、繰り返しを避ける工夫をしましょう。

csharp
// ❌ Bad: 同じロジックのコピペ
void OnEnemyDefeated(Enemy enemy)
{
    int exp = enemy.Exp;
    totalExp += exp;
    Debug.Log($"{exp} EXPを獲得!");
    if (totalExp >= nextLevelExp)
    {
        level++;
        Debug.Log($"レベルアップ! Lv.{level}");
    }
}

void OnQuestCompleted(Quest quest)
{
    int exp = quest.RewardExp;
    totalExp += exp;
    Debug.Log($"{exp} EXPを獲得!");   // ← 上と全く同じ
    if (totalExp >= nextLevelExp)         // ← 上と全く同じ
    {
        level++;
        Debug.Log($"レベルアップ! Lv.{level}");
    }
}
csharp
// ✅ Good: メソッドに切り出す
void OnEnemyDefeated(Enemy enemy)
{
    GainExp(enemy.Exp);
}

void OnQuestCompleted(Quest quest)
{
    GainExp(quest.RewardExp);
}

void GainExp(int amount)
{
    totalExp += amount;
    Debug.Log($"{amount} EXPを獲得!");
    if (totalExp >= nextLevelExp)
    {
        level++;
        Debug.Log($"レベルアップ! Lv.{level}");
    }
}

Unity設計講習会 資料公開ページ