Операторы When часто считаются признаком плохого кода, и их следует избегать.
Разберем пример. Допустим, нужно разработать кнопку с пятью предопределенными размерами:
- маленький (высота = 16dp)
- средний (высота = 24 dp)
- большой (высота = 32dp)
- огромный (высота = 40dp)
- кастомный
Давайте подробнее рассмотрим последнюю приватную функцию getButtonHeight и поймем, что в ней не так.
С дублированием кода связаны две проблемы:
- Повторяющееся создание Dp из Int.
- Дополнительная проверка во время выполнения. Где-то во ViewModel мы уже решили, какую высоту кнопки использовать. Зачем нужна дополнительная проверка? Это бесполезно. Кроме того, это создает накладные расходы во время выполнения. Ресурсы Android-телефона, потраченные на проверку, могут быть использованы на другие более ценные операции — например, анимации.
Избавимся от проверки. Все, что нам нужно сделать, это заменить выражение when на полиморфизм.
Усложним пример. Предположим, что текст и цвет кнопки зависят от размера кнопки. Мы собираемся рассмотреть оба случая.
Сравните два фрагмента ниже.
Пример с полиморфизмом:
Пример с выражением when:
Преимущества полиморфизма:
- Он делает кодовую базу меньше.
- Функционал расширять проще.
- Он исключает дублирование кода.
- Он снижает накладные расходы во время выполнения.