Как и условные операторы if–else
могут быть вложенными, так и тернарные операторы могут быть вложенными, но этим не следует злоупотреблять! Рассмотрим на следующем примере:
У пользователя есть координаты точки, ему нужно определить к какой четверти системы координат xy
принадлежит точка. Координаты записываются в переменные x
и y
.
С этого следует, что если:
-
х > 0
,у > 0
– точка принадлежит I четверти -
х > 0
,у < 0
– точка принадлежит IV четверти -
х < 0
,у > 0
– точка принадлежит II четверти -
х < 0
,у < 0
– точка принадлежит III четверти
Решение с использованием вложенных тернарных операторов:
int x = 10, y = -5;
string quadrant = (x > 0) ? ((y > 0) ? "I четверть" : "IV четверть ") : ((y > 0) ? "II четверть " : "III четверть ");
// или это так же можно записать так:
quadrant = x > 0 ? (y > 0 ? "I четверть " : "IV четверть ") : (y > 0 ? "II четверть " : "III четверть ");
// ... или вообще, вот так
quadrant = x > 0 ? y > 0 ? "I четверть " : "IV четверть " : y > 0 ? "II четверть " : "III четверть ";
Как видно из данного примера чтение кода при использовании вложенных тернарных операторов ухудшается, поэтому такое их использование не рекомендуется.
Решение данной задачи с использованием вложенных if–else
:
int x = 10, y = -5;
string quadrant;
if (x > 0)
{
if (y > 0)
{
quadrant = "I квадрант";
}
else
{
quadrant = "IV квадрант";
}
}
else
{
if (y > 0)
{
quadrant = "II квадрант";
}
else
{
quadrant = "III квадрант";
}
}
Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №4. УСЛОВНЫЕ КОНСТРУКЦИИ"