Этот пост предназначен для того, чтобы дать небольшое представление о том, что такое рефакторинг, и представить инструмент рефакторинга, который в настоящее время имеет Pharo, таким образом, чтобы он мог показать отправную точку, которая у нас будет перед выполнением этого проекта. Итак, приступим ...

1. Что такое рефакторинг?

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

2. Зачем делать рефакторинг?

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

3. Инструмент рефакторинга Pharo.

Инструмент рефакторинга Pharo’s имеет следующие возможности автоматического рефакторинга:

  • Переименовать
  • Извлекать
  • В линию
  • Надавить и подтянуть

3.1. Переименовать

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

Чтобы получить доступ к этой опции, выберите элемент, который вы хотите переименовать, и нажмите Ctrl + R, Pharo покажет вам окно для изменения имени (рисунок 1).

3.2. Извлекать

  • Метод извлечения

Рефакторинг Extract Method позволяет взять фрагмент кода, который можно сгруппировать вместе, переместить его в отдельный метод и заменить старый код вызовом этого метода.

Вы можете получить доступ к этому параметру, выбрав фрагмент кода, который хотите извлечь, щелкните правой кнопкой мыши ›› Предложения ›› Метод извлечения (рисунок 2), откроется окно для имени После извлечения метода после его имени появится окно «Браузер изменений» (рис. 3), в котором показано, как будет выглядеть ваш код после извлечения. Вы можете выбрать, какие изменения нужно внести, и отменить выбор.

Ниже вы увидите пример метода извлечения

- Перед рефакторингом

Example >> method
    | a b c d|
    a := 1.
    b := 2.
    c := a + b.
    d := a + c.

- После рефакторинга

Example >> method
    | a b c d|
    a := 1.
    b := 2.
    c := self add: a to: b.
    d := self add: a to: c.
Example >> add: a to: b
    ^ a + b
  • Извлечь локальный

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

Чтобы получить доступ к этому параметру, вы должны выполнить те же действия, что и для извлечения метода, но вместо выбора параметра Извлечь метод вы должны выбрать Извлечь локально, при этом будет отображаться представление ( Рисунок 4), где вы должны определить имя локальной переменной, с которой вы будете извлекать фрагмент кода

После того как вы дадите имя локальной переменной и нажмете ОК, вы, как и раньше, получите окно «Браузер изменений», в котором вы сможете увидеть свои изменения в коде.

Ниже вы увидите пример извлечения локального

- Перед рефакторингом

Example >> method
    | a b c|
    a := 1.
    b := a + list size.
    c := b + list size.

- После рефакторинга

Example >> method
    | a b c d|
    a := 1.
    d := list size.
    b := a + d.
    c := b + d.

3.3. В линию

  • При рефакторинге Inline temp избыточное использование временной переменной заменяется ее инициализатором.

Вы можете получить доступ к этому параметру, выбрав переменную, которую хотите встроить, а затем щелкните правой кнопкой мыши ›› Исходный код ›› Inline temp (рисунок 5).

Ниже вы увидите пример встроенной температуры

- Перед рефакторингом

Example >> method
    | number b |
    number := anotherClass value.
    b := 3 + number.

- После рефакторинга

Example >> method
    | b |
    b := 3 + anotherClass value.
  • Встроенный метод приводит к помещению тела метода в тело его вызывающих. К этому параметру можно получить доступ, как к методу извлечения, но вместо выбора метода извлечения необходимо выбрать Встроенный метод.

Ниже вы увидите пример встроенного метода

- Перед рефакторингом

Example >> method
    | a b c d|
    a := 1.
    b := 2.
    c := self add: a to: b.
    d := self add: a to: c.
Example >> add: a to: b
    ^ a + b

- После рефакторинга

Example >> method
    | a b c d|
    a := 1.
    b := 2.
    c := a + b.
    d := a + c.

3.4. Надавить и подтянуть

  • Сдвиг вниз улучшает согласованность занятий. Метод находится там, где вы ожидаете его увидеть. Например, если вы видите, что метод требуется более чем одному подклассу, но не всем из них, может быть полезно создать промежуточный подкласс и переместить в него метод. Это позволяет избежать дублирования кода, которое может возникнуть в результате передачи метода всем подклассам.

К этому параметру можно получить доступ, выбрав метод суперкласса, который вы хотите сдвинуть вниз, а затем щелкните правой кнопкой мыши ›› Push down.

  • Pull up избавляется от повторяющегося кода. Если вам нужно внести изменения в метод, лучше сделать это в одном месте, чем искать все дубликаты метода в подклассах; этот метод рефакторинга также можно использовать, если по какой-то причине подкласс переопределяет метод суперкласса, но выполняет, по сути, ту же работу.

Доступ к этому параметру можно получить, выбрав метод подкласса, который вы хотите подтянуть, а затем щелкните правой кнопкой мыши ›› Подтвердить.

Я надеюсь, что этот пост помог улучшить их знания о рефакторинге и увидеть, как использовать их с автоматическими опциями рефакторинга, которые есть в Pharo.

На этом сегодняшний пост, пока и удачного кодирования: D