ドキュメント追加版 案1 と 案2 数字の場合
案1 ワンライナー構造
if (!string.IsNullOrEmpty(input) && int.TryParse(input, out int number) && number == 1234)
{
// 入力は1234の場合
追加処理Bを実行;
}
else
{
// 入力は1234ではないか、NULLまたは空白の場合
既存処理Aを実行;
}
1
!string.IsNullOrEmpty(input)
・入力が空文字列または null かをチェック。
・条件を満たさない場合、後続の評価 (int.TryParse と number == 1234) をスキップ。
2
int.TryParse(input, out int number)
・input を整数型に変換を試みる。成功すれば number に変換結果を格納し、true を返す。
・失敗すれば number の値は未定義 (安全に扱えるが期待する値はない)。
3
number == 1234
TryParse が成功した場合にのみ評価され、1234 と一致するか判定。
案2 条件分割構造
if (!string.IsNullOrEmpty(input) && int.TryParse(input, out int number))
{
if (number == 1234)
{
// 入力は1234の場合
追加処理Bを実行;
}
else
{
// 入力が1234ではない場合
既存処理Aを実行;
}
}
else
{
// 数値変換に失敗、または入力がNULLまたは空白の場合
既存処理Aを実行;
}
1
!string.IsNullOrEmpty(input)
・入力が空文字列または null かをチェック。
・条件を満たさない場合、後続の評価 (int.TryParse) をスキップ。
2
int.TryParse(input, out int number)
・input が数値に変換可能かをチェック。
・成功すれば次の if に進む。
3
number == 1234
・TryParse 成功後に値を比較する。
・比較の条件分離により、可読性が向上。
案1 vs 案2 の比較
項目 案1 案2
可読性 中程度: 条件がまとめられているが複雑に見える。 高い: 条件が分離され、理解しやすい。
メンテナンス性 中程度: 条件追加時に元の式を壊しやすい。 高い: 個別条件のため追加が容易。
冗長性 低い: ワンライナーで簡潔だがネストが深くない。 やや高い: ネストが増える可能性がある。
推奨環境 簡易な処理が求められる環境。 保守性が重要なシステムや複雑な条件がある場合。
TryParseを選ぶべき理由
安全性:
例外を発生させず、数値変換失敗時にも安全に進行。
Parse のような例外を使ったエラーハンドリングが不要。
効率性:
TryParse は例外を使用しないため、例外処理によるオーバーヘッドがない。
リアルタイム性が重要なアプリケーションで特に有効。
直感的で標準的な方法:
開発者がすぐに理解でき、習得のコストが低い。
推奨案: 案2
理由:
条件の分離により、各ステップの意図が明確である。
デバッグや将来的な条件追加が容易。
エラーメッセージやログの挿入ポイントが明確。
シンプルな要件であれば案1も適していますが、汎用性と保守性の観点から案2を推奨します。