C# 基礎からマスターまで — 第2回
条件文、反復文、メソッドでフローを作成する
本ブログ作成文は、講義を目指して製作されました。 また、作成された文章の情報も間違っている可能性がありますので、ご注意ください。
プログラムは値を保存するだけでは終わりません。 条件に応じて異なるコードを実行し、同じ操作を繰り返し、意味のある単位でメソッドを分割する必要があります。
条件文と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つの責任しか持たないことを確認するほうが良い。