案1 OR 案2 TryParseを使用
優先度①:
TryParseはC#で推奨される方法であり、どんな環境でも例外なく動作します。
文字列が数字に変換できない場合でも安全に既存処理Aを実行できます。
優先度②:
TryParseの使用は直感的で、他の開発者が見ても処理の意図が明確です。
「入力を数値に変換する試みを行う」という操作が関数名から分かります。
優先度③:
TryParseは効率的に動作し、エラー処理を明示的にしなくても済むため、
速度面でも優れています。
案1
if (!string.IsNullOrEmpty(input) && int.TryParse(input, out int number) && number == 1234)
{
// 入力は1234の場合
追加処理Bを実行 ;
}
else
{
// 入力は1234ではないか、NULLまたは空白の場合
既存処理Aを実行 ;
}
TryParseの動作例と推奨理由が記載されています。
1 !string.IsNullOrEmpty(input)
inputが空文字列またはnullの場合を排除します。
これにより、int.TryParseで不要な処理が走るのを防ぎます。
2 int.TryParse(input, out int number)
inputを整数型に変換を試みます。
成功した場合は、変換後の値がnumberに代入され、trueを返します。
失敗した場合は、numberの値は未定義で、falseを返します。
3 number == 1234
int.TryParseが成功した場合のみ、この条件が評価されます。
したがって、この時点ではnumberは必ず数値です。
メリット
コードが簡潔
入力が空かどうかを確認しつつ、数値チェックと値の比較を一つのif文で完結できる。
デメリット
条件が空でないかのチェック、数値変換、値の比較を1つの文に複数まとめているため、
ロジックの分離性が低いという点では、読みづらい。
案2
// 入力が空でないかを確認し、数値に変換可能かチェック
if (!string.IsNullOrEmpty(input) && int.TryParse(input, out int number))
{
// 数値変換が成功した場合
if (number == 1234)
{
// 入力は1234の場合
追加処理Bを実行 ;
}
else
{
// 入力がではない場合
既存処理Aを実行 ;
}
}
else
{
// 数値変換に失敗、または入力がNULLまたは空白の場合
既存処理Aを実行 ;
}
メリット
入力の検証 (!string.IsNullOrEmpty と int.TryParse) と値の比較 (number == 1234) を分離して記述しているため、number == 1234が実際に数値を比較していることが直感的に理解しやすくなり可読性が向上。
保守性が高く、将来的な変更が容易。
入力が空か、数値に変換できないかを明確に区別できるメッセージがある。
デメリット
コードが若干冗長になる。
ネストが深くなり、今後条件が増えた場合にはさらに複雑化する可能性がある。
評価
選ぶべき案
案2 が最もバランスが良い。
理由は、可読性と条件ごとの明確な区別が優れており、
将来的なメンテナンス性が高い点にある。
シチュエーションごとの選択
案1 はコードが短いことが求められるシンプルな処理に適している。
案2 は詳細な動作を明確にしたい場面で有用。
総評: 汎用性を考慮すると 案2 を推奨します。