生存確認の判定結果を得る方法の色々

2022年9月15日

よく使われるものに生存判定があります。
これは、都度計算するのではなく、結果がもらえるように準備しておいて、外部から呼び出すのがいい作りになります。
そのために、メソッドやプロパティを別途用意しておいて、使いたい時にアクセスする方法がよく用いられます。

IsAliveメソッド(引数あり)

アクセスする方法

メソッドを考えてみましょう
引数にヘルス(健康値)を与え、結果をもらうようにしています。

 bool isAlive = IsAlive(10);

引数; ヘルス(健康値)
戻り値: 生存の場合true、そうでない場合はfalse

冗長だがわかりやすい例

bool IsAlive(int health)
{
    bool isAlive;

    if (health > 0)
    {
        isAlive = true;
    }
    else
    {
        isAlive = false;
    }

    return isAlive;
}

三項演算子を使って変更した例

bool IsAlive(int health)
{
    bool isAlive;

    isAlive = (health > 0) ? true : false;

    return isAlive;
}

三項演算子を使って直接戻り値とした場合

bool IsAlive(int health)
{
    return (health > 0) ? true : false;
}

三項演算子のelse部分を省略できる例

条件式のみで、結果が真(true)の場合はtrueを、また擬の場合はfalseが得られることを利用して簡略化した。

bool IsAlive(int health)
{
    bool isAlive;

    isAlive = (health > 0);

    return isAlive;
}

isAlive変数の宣言と代入を1行にした例

条件式のみで、結果が真(true)の場合はtrueを、また擬の場合はfalseが得られることを利用して簡略化した。

bool IsAlive(int health)
{
    bool isAlive = (health > 0);

    return isAlive;
}

ローカル変数のisAliveを使わなくても済む例

isAlive変数は、メソッド内で特定の計算のために使っているだけなので、省略しても良い
また、()も省略できます。なお、()に関しては、三項演算子のところから省略することができます。

bool IsAlive(int health)
{
    return health > 0;
}

メソッドに式本体を使った例

インテリセンスを使って、式本体に変更した例です

 bool IsAlive(int health) => health > 0;

IsAliveメソッド(引数なし)

health変数はあらかじめ宣言、代入されているものとします。

アクセスする方法

結果だけをもらうようにしています。()がついているのがメソッドの特徴です。

 bool isAlive = IsAlive();

戻り値: 生存の場合true、そうでない場合はfalse

メソッドに式本体を使った例

インテリセンスを使って、式本体に変更した例です。
health変数は、他のメソッドから値の変更をされることを想定しています。

int health = 10;
 
bool IsAlive() => health > 0;

IsAliveプロパティ

今度は、プロパティで考えてみましょう

アクセスする方法

プロパティの場合、メソッドと違い引数はありません。呼び出すときは、フィールド変数のように扱えます。

 bool isAlive = IsAlive;

戻り値: 生存の場合true、そうでない場合はfalse

基本の形

生死の確認なので、値を代入することはできないようにします。
そのため、setブロックはあえて削除しています。
health変数は、他のメソッドから変更されるものとしています

int health = 10;

public bool IsAlive{
    get
    {
        return health > 0;
    }
}

プロパティを式本体に変更

インテリセンスを使って、ラムダ記号を使った式本体に変更してみましょう

int health = 10;

public bool IsAlive => health > 0;

補足

メソッドの説明で次の最終コードは、インテリセンスでプロパティに変換ができます。

メソッド(引数なし)の最後のコード

int health = 10;
 
bool IsAlive() => health > 0;

インテリセンスでプロパティへ変換

int health = 10;
 
public bool IsAlive => health > 0;

C#

Posted by hidepon