関係パターンと論理パターン
パターン内で条件を組み合わせます。
「関係パターンと論理パターン」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
関係パターン
関係パターンは、<、>、<=、>=のいずれかを使って、入力を定数と比較します。比較結果がtrueの場合に一致します。
C# 9で導入された関係パターンを使うと、明示的な比較を記述せずに、switchアームやis式で範囲チェックを簡潔に表現できます。
int temp = 18;
string level = temp switch
{
< 0 => "freezing",
< 15 => "cold",
< 25 => "mild",
_ => "hot"
};
System.Console.WriteLine(level);is による関係パターン
関係パターンはis式でも使用でき、読みやすいブール値のテストを記述できます。
n is > 0はほぼ英語の文章のように読め、条件、代入、LINQの述語で使用できるboolを返します。
using System;
class Program {
static void Main() {
int score = 82;
bool passed = score is >= 60;
Console.WriteLine(passed);
}
}and パターン
and論理パターンでは、2つのサブパターンの両方が一致する必要があります。上下限のある範囲に最適です。
>= 1 and <= 12は、1以上12以下の値に一致します。andがなければ、1つのパターンで両側の境界を表現することはできません。
int month = 6;
bool valid = month is >= 1 and <= 12;
System.Console.WriteLine(valid);or パターン
or論理パターンは、どちらかのサブパターンが一致した場合に一致します。複数の候補値を1つのアームにまとめられます。
関連するケースごとにアームを繰り返す代わりに、'a' or 'e' or 'i'のようにまとめられます。これにより、switch式を簡潔に保ちながら、意図も明確にできます。
char c = 'e';
string kind = c switch
{
'a' or 'e' or 'i' or 'o' or 'u' => "vowel",
_ => "consonant"
};
System.Console.WriteLine(kind);not パターン
not論理パターンは、サブパターンが一致しない場合に一致します。最も一般的な用途はnot nullです。
また、not 0やnot (> 100)のように他のパターンを否定することもでき、1つのアーム内で除外条件を明確に表現できます。
object? value = "hi";
if (value is not null)
System.Console.WriteLine("present");論理パターンの組み合わせ
論理パターンは組み合わせて使用できます。and、or、notを連結して複雑な条件を作成でき、かっこで優先順位を制御できます。
優先順位は、notが最も高く、次にand、その次にorです。意図が曖昧になる可能性がある場合は、かっこを追加してください。
using System;
class Program {
static string Classify(int n) => n switch {
< 0 or > 100 => "out of range",
>= 0 and <= 50 => "low half",
_ => "high half"
};
static void Main() => Console.WriteLine(Classify(75));
}成績評価での範囲
関係パターンと論理パターンを組み合わせると、従来の成績評価表をすっきり表現できます。
アームは上から下へチェックされるため、単純な上限を使うことも、andで上下限を組み合わせて明示的な範囲を作ることもできます。どちらの形式も有効なので、より明確な方を選んでください。
using System;
class Program {
static char Grade(int s) => s switch {
>= 90 => 'A',
>= 80 and < 90 => 'B',
>= 70 and < 80 => 'C',
_ => 'F'
};
static void Main() => Console.WriteLine(Grade(85));
}プロパティパターンでの not null
not nullを型パターンやプロパティパターンと組み合わせると、安全で表現力の高いガードを作成できます。
obj is Person { Name: not null } pは、NameもnullではないPersonに一致し、その値をバインドします。これにより、nullチェックの連鎖を避けられます。
record Person(string? Name);
object obj = new Person("Kai");
if (obj is Person { Name: not null } p)
System.Console.WriteLine(p.Name);範囲の否定
notとかっこを使うと、関係パターンのグループを否定して除外条件を表現できます。
not (>= 1 and <= 5)は、1から5までの範囲外の値に一致します。一部の読者にとっては、同等の< 1 or > 5よりも直接的に読めます。
using System;
class Program {
static void Main() {
int n = 9;
bool outside = n is not (>= 1 and <= 5);
Console.WriteLine(outside);
}
}型パターンとの組み合わせ
論理パターンは型パターンとも組み合わせられます。o is int or longは、整数型の数値型に対して1回のチェックで一致します。
これは、複数の関連する型を同じように扱う場合に便利です。ただし、orの両側は、結果の使用方法と互換性がなければなりません。
object o = 5L;
string kind = o switch
{
int or long => "integral",
float or double => "floating",
_ => "other"
};
System.Console.WriteLine(kind);可読性のガイドライン
論理パターンは表現力が高い一方で、複雑になりやすいものです。各アームを短く保ち、範囲の指定には and を優先し、明確さのために and/or を混在させる場合は括弧で囲んでください。
条件に多くの節や外部変数が必要な場合は、長い論理パターンよりも when ガードのほうが読みやすいことがあります。意図がより明確に伝わるほうを選んでください。
int n = 42;
string r = n switch
{
> 0 and < 10 when n % 2 == 0 => "small even",
_ => "other"
};
System.Console.WriteLine(r);理解度チェック
関係パターンと論理パターンについての理解度を確認しましょう。
まとめ
関係パターン(< > <= >=)は定数と比較します。論理パターンは and、or、not を使ってサブパターンを組み合わせます。
優先順位は not、and、or の順です。混在させる場合は括弧で囲んでください。次はリストパターンとタプルパターンを扱います。
よくある質問
「関係パターンと論理パターン」レッスンは無料ですか?
はい。「関係パターンと論理パターン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「関係パターンと論理パターン」で何を学びますか?
パターン内で条件を組み合わせます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「関係パターンと論理パターン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- switch式
- 型パターンとプロパティパターン
- 関係パターンと論理パターン
- リストパターンとタプルパターン