Найти в Дзене

Лайфхаки Unity + C#. Развлекаемся с оператором Switch

Сегодня будет длинно, но интересно...) Ставьте ❤️, если поддерживаете длинные постики, мне важно знать стоит ли оно того:) 🧐 Кто помнит историю с Yandere Simulator?) Игры, разработчик которой настолько... своеобразно программирует, что в какой-то момент обнаружилось: практически весь его проект работает на километровых цепочках if-else, из - за чего поддерживать проект становилось совсем невозможно, разработчики бежали, проект сыпался... А вот если бы он использовал switch case... То ничего бы не поменялось, так как архитектуру проекта это не исправит, нооо возможно код был бы чуточку симпотнее) Так что предлагаю познакомиться с парой плюшек, связанных с этой конструкцией:) Начиная с C# 7, switch-выражение умеет работать не только с конкретными значениями, но и с диапазонами. Всё, что нужно сделать - поставить между ключевым словом case и значением знак сравнения >, <, >= или <=! Поддерживаются и комбинации нескольких сравнений сразу - нужно только написать их через специальные операт

Сегодня будет длинно, но интересно...)

Ставьте ❤️, если поддерживаете длинные постики, мне важно знать стоит ли оно того:)

🧐 Кто помнит историю с Yandere Simulator?) Игры, разработчик которой настолько... своеобразно программирует, что в какой-то момент обнаружилось: практически весь его проект работает на километровых цепочках if-else, из - за чего поддерживать проект становилось совсем невозможно, разработчики бежали, проект сыпался... А вот если бы он использовал switch case...

То ничего бы не поменялось, так как архитектуру проекта это не исправит, нооо возможно код был бы чуточку симпотнее)

Так что предлагаю познакомиться с парой плюшек, связанных с этой конструкцией:)

Начиная с C# 7switch-выражение умеет работать не только с конкретными значениями, но и с диапазонами. Всё, что нужно сделать - поставить между ключевым словом case и значением знак сравнения >, <, >= или <=!

Поддерживаются и комбинации нескольких сравнений сразу - нужно только написать их через специальные операторы or...

-2

...или and...

-3

Но что делать, если порог CriticalDamageThreshold не константен, а подсчитывается динамически или настраивается геймдизайнером через Инспектор? В таком случае, switch не позволит вставить поле напрямую в диапазон case'а!

Тут на помощь приходит ключевое слово when, которое позволяет работать и с не константами. С ним мы можем закешировать наше значение в переменную - а уже её спокойно запихивать в любые операции, возвращающие булевое значение.

-4

Выражения после when называются case guards и позволяют добавлять условия любой комплексности, которые должны выполняться, чтобы конкретный кейс свича "поймал" значение. Таким образом одни и те же данные можно заставить попадать в разные части switch-конструкции в зависимости от конкретных обстоятельств, что здорово прокачивает гибкость кода в конкретных моментах.

Честно скажу, на практике такое использую редко, уж больно замороченно выглядит это дело, но фишка интересная:)