トーフメモ

主にゲーム制作

【C#】returnで条件分岐をきれいにしたい!

はじめに

コードを書いていると、どうしても条件が複雑になったりしますよね。
returnを利用してきれいにする流れを個人的にまとめてみました。

直したいコード

private void Attack (int power) {
    if(waitTime == 0) {
        if(forwardEnemy) {
            forwardEnemy.GetComponent<EnemyStatus>().Damage(power);
        }
    } 
}

条件がネストしているので、条件から外れるときにリターンをするようにします。

private void Attack (int power) {
    if(!(waitTime == 0)) return;
    if(!forwardEnemy) return;

    forwardEnemy.GetComponent<EnemyStatus>().Damage(power);
}

条件を関数化します。

private void Attack (int power) {
    if(EnableAttack()) return;
    forwardEnemy.GetComponent<EnemyStatus>().Damage(power);
}

private bool EnableAttack () {
    if(!(waitTime == 0)) return false;
    if(!forwardEnemy) return false;

    return true;
}

EnableAttackで条件式を直接返します。

private void Attack (int power) {
    if(EnableAttack()) return;
    forwardEnemy.GetComponent<EnemyStatus>().Damage(power);
}

private bool EnableAttack () {
    return (waitTime == 0) && forwardEnemy;
}

最初よりはきれいになりました。
条件のネストが深くなるにつれてreturnでの整理は効果を増すはずです。