C# Academy · Урок

Реляционные и логические шаблоны

Объединяйте условия в шаблонах.

Урок 3 из 413 шагов

«Реляционные и логические шаблоны» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Реляционные шаблоны

Реляционный шаблон сравнивает входное значение с константой с помощью <, >, <= или >=. Он соответствует значению, если сравнение истинно.

Реляционные шаблоны появились в C# 9 и позволяют кратко записывать проверки диапазонов в ветвях выражений выбора и выражениях is, не создавая явные сравнения.

int temp = 18;
string level = temp switch
{
    < 0  => "freezing",
    < 15 => "cold",
    < 25 => "mild",
    _    => "hot"
};
System.Console.WriteLine(level);

Реляционные шаблоны с проверкой

Реляционные шаблоны также работают в выражениях is, позволяя создавать понятные логические проверки.

n is > 0 почти читается как обычная фраза и возвращает логическое значение, которое можно использовать в условиях, присваиваниях или предикатах LINQ.

using System;

class Program {
    static void Main() {
        int score = 82;
        bool passed = score is >= 60;
        Console.WriteLine(passed);
    }
}

Шаблон «и»

Логический шаблон and требует соответствия обоих вложенных шаблонов. Он идеально подходит для ограниченных диапазонов.

>= 1 and <= 12 соответствует значениям в диапазоне от 1 до 12 включительно. Без and выразить две границы в одном шаблоне было бы невозможно.

int month = 6;
bool valid = month is >= 1 and <= 12;
System.Console.WriteLine(valid);

Шаблон «или»

Логический шаблон or соответствует значению, если ему соответствует хотя бы один из вложенных шаблонов. Он объединяет альтернативные значения в одну ветвь.

Вместо повторения ветвей для связанных случаев конструкция 'a' or 'e' or 'i' объединяет их. Благодаря этому выражения выбора остаются компактными и ясно передают замысел.

char c = 'e';
string kind = c switch
{
    'a' or 'e' or 'i' or 'o' or 'u' => "vowel",
    _ => "consonant"
};
System.Console.WriteLine(kind);

Шаблон «не»

Логический шаблон not соответствует значению, если его вложенный шаблон не соответствует. Чаще всего он используется в конструкции not null.

Он также отрицает другие шаблоны, например not 0 или not (> 100), позволяя ясно выражать исключения внутри одной ветви.

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 с шаблонами типов и свойств создаёт безопасные и выразительные защитные условия.

Конструкция obj is Person { Name: not null } p соответствует ненулевому Person, у которого Name также не равно 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 сопоставляет целые числовые типы одной проверкой.

Это удобно, когда несколько связанных типов нужно обрабатывать одинаково. Обратите внимание: обе части 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; при смешивании используйте скобки. Далее мы рассмотрим шаблоны списков и кортежей.

Можно начать бесплатно

Изучай C# с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
93
Уроки
346

Часто задаваемые вопросы

Урок «Реляционные и логические шаблоны» бесплатный?

Да — полный текст урока «Реляционные и логические шаблоны» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Реляционные и логические шаблоны»?

Объединяйте условия в шаблонах. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Реляционные и логические шаблоны»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Выражения switch
  2. Шаблоны типов и свойств
  3. Реляционные и логические шаблоны
  4. Шаблоны списков и кортежей
← Назад к C# Academy