Remover Atribuições a Parâmetros.
Algum valor é atribuído a um parâmetro dentro do corpo do método.
Use uma variável local em vez de um parâmetro.
##Example
int discount(int inputVal, int quantity) {
if (quantity > 50) {
inputVal -= 2;
}
// ...
}int discount(int inputVal, int quantity) {
int result = inputVal;
if (quantity > 50) {
result -= 2;
}
// ...
}##Why Refactor
Os motivos para essa refatoração são os mesmos de Separar Variável Temporária, mas neste caso estamos lidando com um parâmetro, e não com uma variável local.
Primeiro, se um parâmetro é passado por referência, então, depois que o valor do parâmetro é alterado dentro do método, esse valor é repassado ao argumento que solicitou a chamada desse método. Muitas vezes isso acontece por acidente e leva a efeitos indesejados. Mesmo que, na sua linguagem de programação, os parâmetros normalmente sejam passados por valor (e não por referência), essa peculiaridade de codificação pode incomodar quem não está acostumado a ela.
Segundo, várias atribuições de valores diferentes a um único parâmetro dificultam saber quais dados o parâmetro deveria conter em determinado momento. O problema piora se o seu parâmetro e seu conteúdo estão documentados, mas o valor real pode diferir do que se espera dentro do método.
##Benefits
-
Cada elemento do programa deve ser responsável por apenas uma coisa. Isso facilita muito a manutenção do código daqui para frente, já que você pode substituir o código com segurança, sem efeitos colaterais.
-
Essa refatoração ajuda a extrair código repetitivo para métodos separados.
##How to Refactor
-
Crie uma variável local e atribua a ela o valor inicial do seu parâmetro.
-
Em todo o código do método que vem após essa linha, substitua o parâmetro pela sua nova variável local.