0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unity for文を1つにまとめたい!

Last updated at Posted at 2021-05-23

0. 前提

この記事はリストや配列などを用いる時に何度も使うforを1つにまとめよう!という記事です。
指摘などありましたら、ぜひコメントお願いします。

※あくまで、こういう方法があるというだけで、絶対に推奨するというものではありません。

1. 変更前

Character.cs
public class Character
{
    private bool isAlive = true;

    public void Attack() {//攻撃処理}

    public void Guard() {//防御処理}

    public bool IsAlive()
    {
        return isAlive; 
    }
}
Main.cs
    private List<Character> characters = new List<Character>();

    void CharacterAttack()
    {
        for (int i = 0; i < characters.Count; i++)
        {
            characters[i].Attack();
        }
    }

    void CharacterGuard()
    {
        for(int i = 0; i < characters.Count; i++)
        {
            if(characters[i].IsAlive())
            {
                characters[i].Guard();
            }
        }
    }

こんな感じのがあったとします。

2. for文をまとめる

for文を1つにするために以下を作成します。

void Each<T>(List<T> list, Action<T> action, Func<T,bool> func = null)
{
    for (int i = 0; i < list.Count; i++)
    {
        if (func())
        {
            action(list[i]);
        }
    }
}

※引数について
第一引数(list)   ・・・ 処理を行う要素のリスト
第二引数(action) ・・・ 各要素が行う処理
第三引数(func)  ・・・ 処理を行う条件(省略可能)
となっています。

Main
    private List<Character> characters = new List<Character>();

    void CharacterAttack()
    {
        Each(characters, CallAttack);
    }

    void CallAttack(Character character)
    {
        character.Attack();
    }

    void CharacterGuard()
    {
        Each(characters, (character) => character.Guard(), (character) => character.IsAlive());
    }

Attackはそのままの使い方
Guardはラムダ式を利用した使い方になっています。

このように毎回for文を書く必要がなくなります!
これが2次元の配列などになってくるとよりメリットを感じれると思います。

3. 最後に

いかがでしたでしょうか?
慣れないと読みにくいと感じると思いますが、コードがかなりスッキリします。
それぞれの状況に合わせて、利用するか考えてみて頂けたらと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?