0Pricing
C# Academy · レッスン

関係パターンと論理パターン

パターン内で条件を組み合わせます。

「関係パターンと論理パターン」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. switch式
  2. 型パターンとプロパティパターン
  3. 関係パターンと論理パターン
  4. リストパターンとタプルパターン
← C# Academyに戻る