Добавить в корзинуПозвонить
Найти в Дзене
"Мы"-Прогер

Изучаем C# - switch и тернарный оператор условия

В прошлой статье https://dzen.ru/a/aXDs37Yy9nmn3Jfw?share_to=link мы разобрали, как писать условия. Теперь пора рассмотреть более продвинутые варианты. Если нужно сравнить что-то с каким-то набором значений, то правильно использовать switch. Например, тут мы сравнивали myInt с 0, 1, 2, 3 или иным значением: У первого if зелёным пунктиром подсвечена подсказка. Если мы поставим на него каретку, чтобы вводить текст, и нажмём жёлтую лампочку (или Alt + Enter), то мы увидим То есть, можно автоматически сконвертировать if в switch. Получится: Оператор switch берёт значение переменной myInt и по очереди сравнивает его со всем значениями case. Когда он находит первый подходящий case, то выполняет секцию до ближайшего break. Изо всех case выполняется первый подходящий. Например, если убрать break, то несколько вариантов сольются в один: Секция default выполняется, если ни один из вариантов не подошёл. Прожмём лампочку на if для кода, где мы делали деление: Оказывается, можно писать case > 0 и c
Оглавление

В прошлой статье https://dzen.ru/a/aXDs37Yy9nmn3Jfw?share_to=link мы разобрали, как писать условия. Теперь пора рассмотреть более продвинутые варианты.

Оператор switch

Если нужно сравнить что-то с каким-то набором значений, то правильно использовать switch. Например, тут мы сравнивали myInt с 0, 1, 2, 3 или иным значением:

У первого if зелёным пунктиром подсвечена подсказка. Если мы поставим на него каретку, чтобы вводить текст, и нажмём жёлтую лампочку (или Alt + Enter), то мы увидим

-2

То есть, можно автоматически сконвертировать if в switch. Получится:

-3

Оператор switch берёт значение переменной myInt и по очереди сравнивает его со всем значениями case. Когда он находит первый подходящий case, то выполняет секцию до ближайшего break. Изо всех case выполняется первый подходящий. Например, если убрать break, то несколько вариантов сольются в один:

-4

Секция default выполняется, если ни один из вариантов не подошёл.

Прожмём лампочку на if для кода, где мы делали деление:

-5

Оказывается, можно писать case > 0 и case < 0. Более того, можно объединять несколько случаев с помощью or. Пойдём обратно в myInt и попробуем это:

-6

Задание: прожмите лампочку на первом if из квадратного уравнения и посмотрите, какой switch получится.

Сделаем сохранение в Git, назвав его "Оператор switch".

Тернарный оператор условия

Если нужно быстро проверить какое-нибудь условие и в зависимости от него взять ту или иную часть формулы, то удобно использовать внутристрочной if:

В зависимости от знака числа signedNumber выбирается та или иная строка
В зависимости от знака числа signedNumber выбирается та или иная строка

Это называется тернарный оператор условия. В общем виде он выглядит так:

Тернарный оператор условия
Тернарный оператор условия

Он называется тернарным, потому что состоит из трёх частей: условия, значения, когда условие истинно и значения, когда оно ложно.

Как и всегда, можно комбинировать друг с другом какие угодно команды, главное, чтобы типы данных подходили. Например, так:

Тернарник внутри команды Console.WriteLine()
Тернарник внутри команды Console.WriteLine()

Значением тернарного оператора (красное выражение) в данном случае является строка (либо одна, либо другая) - тип данных string. Он-то и подаётся на вход команде Console.WriteLine() (жёлтое выражение). Она как раз должна печатать строку, так что всё в порядке.

Также можно вложить один тернарник в другой:

-10
Тернарник в тернарнике в Console.WriteLine()
Тернарник в тернарнике в Console.WriteLine()

Можно вынести общий текст за пределы тернарника и соединить строку "Число ..." со строкой-результатом тернарника:

-12
-13

Здесь мы уже не смогли без скобок - надо было указать, что строка "Число ..." соединяется с результатом тернарника, а не с signedNumber. Без скобок C# соединяет строку "Число ..." с числом signedNumber, в результате чего число приписывается к строке, а затем результат этого соединения (типа string) сравнивается с 0 (типа int). Разумеется, C# не умеет сравнивать строку с числом:

-14

Сделаем сохранение в Git, назвав его "Тернарный оператор условия".

Внутристрочной switch (выражение switch)

Если нужно проверить несколько условий, то, чтобы не делать лапшу из множества if'ов, можно использовать внутристрочной switch:

-15

В отличие от обычного switch, у внутристрочного сначала пишется переменная, значение которой будет сравниваться, а затем уже слово switch. Границы действия switch обозначаются фигурными скобками. Случаи отделяются от результатов стрелками =>. Аналогом случая default является подчёркивание _:

-16

По сути, switch заменяет каждый случай на строку (или на что-нибудь другое).

Так же, как и тернарный оператор условия, внутристрочной switch может использоваться в более сложном выражении. Например, здесь мы объединяем результат switch со строкой "Число ...", а затем печатаем результат:

Внутристрочной switch на C#
Внутристрочной switch на C#
-18

Чтобы удобнее читать такие громоздкие выражения (а в реальных программах их очень много), располагайте закрывающие скобки под соответствующими открывающими и применяйте автоматический стиль кода (Ctrl + Alt + L).

Сделаем сохранение в Git, назвав его "Выражение switch".

Далее

Классы как составные типы данных - https://dzen.ru/a/aXjruZrLtAUxqw3e?share_to=link

Оглавление - https://dzen.ru/a/aXisxwt_Mnz2qTjs?share_to=link