ConstructiCat Logo
CodeBust.
Browse section ▾

Извлечение переменной.

Problem

У вас есть сложное для понимания выражение.

Solution

Поместите результат выражения или его части в отдельные переменные, поясняющие суть выражения.

##Example

Before
void renderBanner() {
  if ((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // do something
  }
}
After
void renderBanner() {
  final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
  final boolean isIE = browser.toUpperCase().indexOf("IE") > -1;
  final boolean wasResized = resize > 0;

  if (isMacOs && isIE && wasInitialized() && wasResized) {
    // do something
  }
}

##Why Refactor

Главная мотивация этого рефакторинга — сделать более понятным сложное выражение, разбив его на промежуточные части. Это может быть:

  • Условие оператора if() или части оператора ?: в C-подобных языках.

  • Длинное арифметическое выражение без промежуточных результатов.

  • Длинное склеивание строк.

Выделение переменной может стать первым шагом к последующему извлечению метода, если вы увидите, что выделенное выражение используется и в других местах кода.

##Benefits

  • Улучшает читабельность кода. Постарайтесь дать выделенным переменным хорошие названия, которые будут отражать точно суть выражения. Так вы сделаете код читабельным и сумеете избавиться от лишних комментариев. Например, customerTaxValue, cityUnemploymentRate, clientSalutationString и т. д.

##How to Refactor

  1. Вставьте новую строку перед интересующим вас выражением и объявите там новую переменную. Присвойте этой переменной часть сложного выражения.

  2. Замените часть вынесенного выражения новой переменной.

  3. Повторите это для всех сложных частей выражения.