[C#] switch文での比較演算子の活用法
C#のswitch文は通常、特定の値に基づいて分岐を行いますが、C# 7.0以降では「パターンマッチング」を利用して比較演算子を活用できます。
これにより、switch文内で条件を柔軟に設定できます。
たとえば、数値の範囲に基づいて処理を分岐させることが可能です。
以下のように、case
ラベルでwhen
キーワードを使って条件を指定します。
例として、case int n when n > 0:
のように記述することで、正の整数に対する処理を定義できます。
これにより、switch文の表現力が大幅に向上します。
switch文での比較演算子の活用
C#のswitch文は、特定の値に基づいてコードの実行を分岐させるための便利な構文です。
通常、switch文は整数や文字列の値に対して使用されますが、C# 7.0以降では、比較演算子を用いたより柔軟な条件分岐が可能になりました。
ここでは、switch文での比較演算子の活用法について詳しく解説します。
比較演算子を使ったswitch文の書き方
C# 7.0以降では、switch文においてwhen
キーワードを使用することで、条件に基づいた分岐を行うことができます。
以下に基本的な書き方を示します。
using System;
class Program
{
static void Main()
{
int number = 15; // 比較する数値
switch (number)
{
case int n when n < 10:
Console.WriteLine("10未満です");
break;
case int n when n >= 10 && n < 20:
Console.WriteLine("10以上20未満です");
break;
default:
Console.WriteLine("20以上です");
break;
}
}
}
10以上20未満です
この例では、number
の値に基づいて、異なるメッセージを表示します。
when
キーワードを用いることで、より複雑な条件をswitch文内で扱うことができます。
whenキーワードの使い方
when
キーワードは、switch文の各ケースに追加の条件を指定するために使用されます。
これにより、単純な値の一致だけでなく、条件に基づいた分岐が可能になります。
using System;
class Program
{
static void Main()
{
int age = 25; // 年齢
switch (age)
{
case int a when a < 18:
Console.WriteLine("未成年です");
break;
case int a when a >= 18 && a < 65:
Console.WriteLine("成人です");
break;
case int a when a >= 65:
Console.WriteLine("高齢者です");
break;
}
}
}
成人です
この例では、age
の値に基づいて、年齢層に応じたメッセージを表示します。
when
キーワードを使うことで、switch文の柔軟性が大幅に向上します。
数値の範囲を扱う例
switch文を使用して数値の範囲を扱うことも可能です。
以下の例では、数値が特定の範囲にあるかどうかを判定します。
using System;
class Program
{
static void Main()
{
int score = 75; // スコア
switch (score)
{
case int s when s >= 90:
Console.WriteLine("優秀です");
break;
case int s when s >= 70:
Console.WriteLine("良いです");
break;
case int s when s >= 50:
Console.WriteLine("普通です");
break;
default:
Console.WriteLine("改善が必要です");
break;
}
}
}
良いです
この例では、score
の値に基づいて、評価を表示します。
数値の範囲を指定することで、switch文を使った柔軟な条件分岐が可能になります。
文字列の比較を行う例
switch文は文字列の比較にも使用できます。
以下の例では、文字列の内容に基づいて異なるメッセージを表示します。
using System;
class Program
{
static void Main()
{
string status = "完了"; // ステータス
switch (status)
{
case string s when s == "開始":
Console.WriteLine("プロセスが開始されました");
break;
case string s when s == "進行中":
Console.WriteLine("プロセスが進行中です");
break;
case string s when s == "完了":
Console.WriteLine("プロセスが完了しました");
break;
default:
Console.WriteLine("不明なステータスです");
break;
}
}
}
プロセスが完了しました
この例では、status
の値に基づいて、プロセスの状態を表示します。
文字列の比較を行うことで、switch文を使った条件分岐がさらに多様化します。
実践例
switch文を用いた比較演算子の活用法を理解したところで、実際のプログラムでどのように応用できるかを見ていきましょう。
ここでは、年齢、温度、スコアに基づく実践的な例を紹介します。
年齢に基づくカテゴリ分け
年齢に基づいて、個人を異なるカテゴリに分類するプログラムを作成します。
以下の例では、年齢に応じて「子供」、「青年」、「成人」、「高齢者」に分類します。
using System;
class Program
{
static void Main()
{
int age = 30; // 年齢
switch (age)
{
case int a when a < 13:
Console.WriteLine("子供");
break;
case int a when a >= 13 && a < 20:
Console.WriteLine("青年");
break;
case int a when a >= 20 && a < 65:
Console.WriteLine("成人");
break;
case int a when a >= 65:
Console.WriteLine("高齢者");
break;
}
}
}
成人
このプログラムでは、age
の値に基づいて、年齢カテゴリを判定し、適切なメッセージを表示します。
温度に基づく警告メッセージ
温度に基づいて、異なる警告メッセージを表示するプログラムを作成します。
以下の例では、温度に応じて「低温注意」、「通常」、「高温注意」のメッセージを表示します。
using System;
class Program
{
static void Main()
{
int temperature = 35; // 温度
switch (temperature)
{
case int t when t < 0:
Console.WriteLine("低温注意");
break;
case int t when t >= 0 && t <= 30:
Console.WriteLine("通常");
break;
case int t when t > 30:
Console.WriteLine("高温注意");
break;
}
}
}
高温注意
このプログラムでは、temperature
の値に基づいて、温度に応じた警告メッセージを表示します。
スコアに基づく評価
スコアに基づいて、異なる評価を行うプログラムを作成します。
以下の例では、スコアに応じて「不合格」、「合格」、「優秀」の評価を行います。
using System;
class Program
{
static void Main()
{
int score = 85; // スコア
switch (score)
{
case int s when s < 50:
Console.WriteLine("不合格");
break;
case int s when s >= 50 && s < 80:
Console.WriteLine("合格");
break;
case int s when s >= 80:
Console.WriteLine("優秀");
break;
}
}
}
優秀
このプログラムでは、score
の値に基づいて、スコアに応じた評価を表示します。
switch文を用いることで、条件に基づいた評価を簡潔に記述できます。
応用例
switch文における比較演算子の活用は、基本的な条件分岐だけでなく、より複雑な条件を扱うことも可能です。
ここでは、複数条件の組み合わせやオブジェクトのプロパティを使った条件分岐、列挙型との組み合わせについて解説します。
複数条件の組み合わせ
複数の条件を組み合わせて、より複雑なロジックを実装することができます。
以下の例では、年齢と職業に基づいて異なるメッセージを表示します。
using System;
class Program
{
static void Main()
{
int age = 30; // 年齢
string occupation = "学生"; // 職業
switch (age)
{
case int a when a < 18 && occupation == "学生":
Console.WriteLine("未成年の学生です");
break;
case int a when a >= 18 && occupation == "学生":
Console.WriteLine("成人の学生です");
break;
case int a when a >= 18 && occupation == "社会人":
Console.WriteLine("成人の社会人です");
break;
default:
Console.WriteLine("その他のカテゴリです");
break;
}
}
}
成人の学生です
このプログラムでは、age
とoccupation
の両方の条件に基づいて、適切なメッセージを表示します。
オブジェクトのプロパティを使った条件分岐
オブジェクトのプロパティを用いて条件分岐を行うことも可能です。
以下の例では、Person
オブジェクトのプロパティに基づいてメッセージを表示します。
using System;
class Person
{
public int Age { get; set; } // 年齢
public string Name { get; set; } // 名前
}
class Program
{
static void Main()
{
Person person = new Person { Age = 45, Name = "田中" }; // Personオブジェクトの作成
switch (person)
{
case Person p when p.Age < 18:
Console.WriteLine($"{p.Name}さんは未成年です");
break;
case Person p when p.Age >= 18 && p.Age < 65:
Console.WriteLine($"{p.Name}さんは成人です");
break;
case Person p when p.Age >= 65:
Console.WriteLine($"{p.Name}さんは高齢者です");
break;
}
}
}
田中さんは成人です
このプログラムでは、Person
オブジェクトのAge
プロパティに基づいて、年齢に応じたメッセージを表示します。
列挙型とswitch文の組み合わせ
列挙型を用いることで、コードの可読性を向上させることができます。
以下の例では、列挙型DayOfWeek
を用いて、曜日に応じたメッセージを表示します。
using System;
enum DayOfWeek
{
日曜日,
月曜日,
火曜日,
水曜日,
木曜日,
金曜日,
土曜日
}
class Program
{
static void Main()
{
DayOfWeek today = DayOfWeek.水曜日; // 今日の曜日
switch (today)
{
case DayOfWeek.日曜日:
case DayOfWeek.土曜日:
Console.WriteLine("週末です");
break;
case DayOfWeek.月曜日:
case DayOfWeek.火曜日:
case DayOfWeek.水曜日:
case DayOfWeek.木曜日:
case DayOfWeek.金曜日:
Console.WriteLine("平日です");
break;
}
}
}
平日です
このプログラムでは、DayOfWeek
列挙型を用いて、曜日に応じたメッセージを表示します。
列挙型を使用することで、コードの意図が明確になり、保守性が向上します。
まとめ
この記事では、C#のswitch文における比較演算子の活用法について、基本的な書き方から実践的な応用例までを詳しく解説しました。
switch文を用いることで、条件分岐を簡潔かつ効率的に記述できることがわかります。
これを機に、実際のプログラムでswitch文を活用し、より柔軟で読みやすいコードを書くことに挑戦してみてください。