Switch

Простой способ облагородить свой код

Скорее всего, вы, как и я, научились не перегружать исходный код операторами if . Они трудно читаются. Такой код сложно проверить и выглядит он совсем не ахти.

Только взгляните:

Ужасный набор условий

Конечно же, это абстрактный пример, вырванный из контекста реального приложения. Только представьте себе, как мы выполняем вызовы функций внутри операторов. Или проверяем большое количество условий.

Каким решением разработчики пользуются чаще?

Давайте рассмотрим следующий пример. Сначала мы сравниваем выражение с набором значений, а затем выполняем код, когда одно из значений становится true. Все ли вы понимаете? Может, будет проще воспользоваться оператором switch ?

Еще более ужасный набор условий

Я специально не убрал отбивку, пусть даже она не особо нужна при операторе return.

А сможете сразу понять, что не так с этим примером?

Написав такое, вы ничуть не сократите детализацию кода. Да и сложность кода никуда не денется. Такой код по-прежнему странно выглядит и с трудом поддерживается. Хотя теперь легче понять, что же вы пытаетесь в нем сделать.

Решение

Думаю, вам должно быть интересно, как работает рефакторинг. И почему этот пример может быть поучительным. Большинство людей привыкло писать код в такой хронологии:

  • подумать о проблеме;
  • реализовать черновое решение или прототип;
  • написать код;
  • подкорректировать части кода, чтобы он выглядел/выполнялся/работал лучше.

Последняя часть обычно считается рефакторингом. И она не должна быть «разовой акцией». Не проводите рефакторинг впопыхах сразу после написания кода, чтобы затем позабыть о файле.

Это так не работает. Рефакторинг похож на замкнутый круг. Вы что-то реализуете, затем стараетесь это дело улучшить, потом сокращаете, а после — избавляетесь от проблемных мест.

“Код должен быть гибким. И вы поддерживаете эту гибкость своим непрерывным вниманием к деталям ”.

Поэтому постарайтесь еще глубже погрузиться в процесс рефакторинга. Не останавливайтесь на первом этапе. А если работаете с уже готовым кодом, то пытайтесь улучшить его сразу. Плавно и без лишней спешки.

Давайте закончим с проверкой условий. Почему бы не воспользоваться функцией вместо switch?

Более правильный способ выполнения нескольких условий

Обратите внимание, как мы определяем объект ingredients. Так мы избегаем его создания при каждом вызове getIngredients. А || используется для управления стандартными случаями, когда мы возвращаем lemon.

Проще, красивее и легче поддерживается. Это как раз то, что может сделать хороший рефакторинг. Но не останавливайтесь после первой попытки.

И помните, что вы можете пользоваться Map:

Заключение

Целью данной статьи было не просто показать вам, как можно улучшить код, но и пролить свет на процесс рефакторинга, а также объяснить, почему многие из нас его делают неправильно. Надеюсь, эта информация была вам полезной.

Читайте также:


Перевод статьи Piero Borrelli: Little Unknown Way To Get Rid Of Switch Statements