Pergunta

Por isso, executar uma ferramenta de qualidade de código chamado fedor vez em quando como parte da nossa projeto. A ferramenta basicamente procura por código de cheiros e os informa. Aqui, observamos que temos "Duplicação" cheiro cada vez que tenta acessar uma chave em params mais de uma vez (como se estivéssemos fazendo um método chamado duas vezes com os mesmos parâmetros ou estamos duplicando uma condição if etc). No entanto, params é apenas um Hash, certo? Outros hashes não recebem cheiro a duplicação quando as chaves são acessados ??mais de uma vez.

Por que isso acontece? O que params exatamente? Faz sentido para params de cache em uma variável local, em seguida, usá-los? Será que vai ajudar ou é o mesmo? Ou há de errado alguma coisa com a ferramenta? Ajuda!

Foi útil?

Solução

Com a versão atual é melhor para executar Reek apenas em seus app / models pasta, porque levanta falsos positivos contra pontos de vista e os controladores.

params é uma espécie de DTO (objeto de transferência de dados) perto da fronteira do sistema, e assim por suas características deve ser diferente do que o código regular. Mas Reek não sabe que (ainda). Eu pretendo melhorar Reek no futuro próximo para que ele joga melhor com Rails. Por agora, porém, a sua melhor aposta é a de limitar a olhar para app / models (e talvez app / ajudantes e lib).

Outras dicas

params é uma chamada de método que faz um @params ||= @request.params

Pode ser que ele pensa params é um método complicado, por isso quer que você tentar e de cache em uma variável, mas, não acho que seria pena especialmente uma vez que é memoized (com base na minha rack_process.rb de Rails 2.2)

params[:foo] é um método chamado para Hash#[], então fedor está correto. Eu não estou familiarizado com o cheiro, por isso não posso dizer por outros acessos Hash não se contado o mesmo. Hash#[] deve ser rápido o suficiente para que você não precisa para armazená-lo em uma variável local, a menos que você está em um desempenho parte muito crítica do seu código.

A única diferença entre o hash de parâmetros e uma Hash regular é que ele usa with_indifferent_access, ou seja, você pode acessar qualquer chave com uma corda ou um símbolo.

Acredito que cada vez que você chamar params, há uma etapa de inicialização que gera chamadas de método, eu suponho que você pode tentar criar um params e verificar número de chamadas. este poderia ser palpite cego. : -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top