技術資料:C#コードのリファクタリング ~ユーザーフレンドリーな設計~

はじめに

本資料では、C#の簡単なプログラムを例に、コードのリファクタリング手法について解説します。リファクタリングとは、コードの動作を変更せずに、その構造や可読性、保守性を改善する作業のことです。

今回の例では、範囲内の数値入力を求めるプログラムを題材とし、ユーザー体験を向上させるための改善を行います。初学者にも理解しやすい記述を目指して、具体的なエラーメッセージの追加や、条件表現の簡潔化を実施しています。


元のコード

var num = 0;

while (num <= 0 || 5 <= num)
{
    Console.WriteLine("1,2,3,4,のいずれかを入力してください");

    var line = Console.ReadLine();
    num = int.Parse(line);
}

Console.WriteLine($"{num}が入力されました");

解説

  • 初期値 var num = 0; を設定し、範囲外の数値に対してループを制御。
  • 無効な入力がある場合、再度メッセージを表示する構造になっています。
  • エラーメッセージとして「1,2,3,4,のいずれかを入力してください」を繰り返し表示しますが、無効な理由までは具体的に説明されていません。

リファクタリング後のコード

Console.WriteLine("1,2,3,4,のいずれかを入力してください");

while (true)
{
    var line = Console.ReadLine();
    var num = int.Parse(line);

    if (1 <= num && num <= 4)
    {
        Console.WriteLine($"{num}が入力されました");
        break;
    }

    Console.WriteLine("無効な入力です。1,2,3,4のいずれかを入力してください");
}

改善点

  1. 具体的なエラーメッセージ:
    • 無効な入力に対して「無効な入力です」と明示し、理由を伝えることでユーザーフレンドリーに。
  2. ループ条件の簡略化:
    • while (true) を使用し、break による制御を採用。条件が簡潔で意図が明確。
  3. メッセージの一元化:
    • 最初のメッセージをループ外に移動し、冗長な表示を排除。
  4. 条件記述の可読性向上:
    • 条件を 1 <= num && num <= 4 と記述し、数学的で自然な順序に変更。

比較表

項目元のコードリファクタリング後のコード
ループ構造条件付き while を記述while (true) を採用し、break で制御
読みやすさ条件の可読性がやや低い条件が自然な順序で記述され、理解しやすい

実行例

元のコードの出力

1,2,3,4,のいずれかを入力してください
0
1,2,3,4,のいずれかを入力してください
5
1,2,3,4,のいずれかを入力してください
3
3が入力されました

リファクタリング後の出力

1,2,3,4,のいずれかを入力してください
0
無効な入力です。1,2,3,4のいずれかを入力してください
5
無効な入力です。1,2,3,4のいずれかを入力してください
3
3が入力されました

修正ポイントの意義

  • 無効な入力に対して具体的なメッセージを追加し、ユーザーの理解を助ける。
  • コード構造を簡潔化し、意図を明確に。
  • 条件記述の順序を見直し、より読みやすく。

この資料を参考に、ユーザー体験を向上させるコードリファクタリングを心掛けてください。

C#,繰り返し

Posted by hidepon