Сегодня будет длинно, но интересно...)
Ставьте
Тооо ничего бы не поменялось, так как архитектуру проекта это не исправит, нооо возможно код был бы чуточку симпотнее)
Так что предлагаю познакомиться с парой плюшек, связанных с этой конструкцией:)
Начиная с C# 7, switch-выражение умеет работать не только с конкретными значениями, но и с диапазонами. Всё, что нужно сделать - поставить между ключевым словом
case и значением знак сравнения >, <, >= или <=! private const int CriticalDamageThreshold = 10;
private void HandleDamage(int amount)
{
switch (amount)
{
// "Поймает" значения ∈ [10; ∞]
case >= CriticalDamageThreshold:
Debug.Log("Critical damage!");
break;
// "Поймает" значения ∈ (0; 10)
case > 0:
Debug.Log("Damaged!");
break;
case 0:
Debug.Log("Miss!");
break;
default:
throw new ArgumentOutOfRangeException($"{amount}");
}
}
Поддерживаются и комбинации нескольких сравнений сразу - нужно только написать их через специальные операторы
or... case > 1 or < -1:
// Делаем что-то
break;
...или
and...case >= 0 and < 10:
// Делаем что-то
break;
Но что делать, если порог CriticalDamageThreshold не константен, а подсчитывается динамически или настраивается геймдизайнером через Инспектор? В таком случае,
switch не позволит вставить поле напрямую в диапазон case'а!Тут на помощь приходит ключевое слово
when, которое позволяет работать и с не константами. С ним мы можем закешировать наше значение в переменную - а уже её спокойно запихивать в любые операции, возвращающие булевое значение.[SerializeField]
private int _criticalDamageThreshold = 10;
private void HandleDamage(int amount)
{
switch (amount)
{
case int damage when damage >= _criticalDamageThreshold:
Debug.Log("Critical damage!");
break;
// <...>
}
}
Выражения после
when называются case guards и позволяют добавлять условия любой комплексности, которые должны выполняться, чтобы конкретный кейс свича "поймал" значение. Таким образом одни и те же данные можно заставить попадать в разные части switch-конструкции в зависимости от конкретных обстоятельств, что здорово прокачивает гибкость кода в конкретных моментах.Честно скажу, на практике такое использую редко, уж больно замароченно выглядит это дело, но фишка интересная:)
Кстати, это еще не все фокусы со свитчом, так что ставьте
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥173❤10👍3🤝3😁2🐳2
Спорим вы не знали об игре, которая перевернула разработку игр?)
Мне всегда нравилось узнавать об играх сделанных на Unity, поэтому решил выделить это дело в отдельную рубрику на канале, поставьте🔥 в поддержку:)
Сегодня мы не будем говорить о полезных фишках для Unity. Вместо этого обсудим одну игру - чёрного лебедя, о которой вы, скорее всего, ничего не знаете... а ведь если бы не она, то сегодня вся игровая индустрия выглядела бы совсем иначе - и далеко не факт, что в лучшую сторону.
🧐 Инфы получилось довольно много, так что оформление будет в виде карточек:)
Ну а подобные постики будем помечать тэгом #MadeWithUnity
Мне всегда нравилось узнавать об играх сделанных на Unity, поэтому решил выделить это дело в отдельную рубрику на канале, поставьте
Сегодня мы не будем говорить о полезных фишках для Unity. Вместо этого обсудим одну игру - чёрного лебедя, о которой вы, скорее всего, ничего не знаете... а ведь если бы не она, то сегодня вся игровая индустрия выглядела бы совсем иначе - и далеко не факт, что в лучшую сторону.
Ну а подобные постики будем помечать тэгом #MadeWithUnity
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥118🐳3❤2🌚2👍1