método de la curva de campana de refactorización
Suponiendo tres atributos conocidos:
- límite (el número de casos en el borde)
- matriz de identificadores de casos totales
- el enfoque del análisis (arriba, medio, abajo)
¿Puede refactorizarse mejor el siguiente método?:
tamaño_del_arreglo = ids.size
if contexto == 'arriba'
ids = ids[0..params[:limite].to_i])
elsif contexto == 'abajo'
ids = ids.pop( ( tamaño_del_arreglo - params[:limite].to_i ) )
else
remover_arriba = ids.drop( ( params[:limite].to_i / 2).round )
remover_abajo = ids.pop( ( tamaño_del_arreglo - (params[:limite].to_i / 2).round ) )
ids = (ids - ( remover_arriba + remover_abajo ) ))
end
davy.ai
Sí, el siguiente método se puede refactorizar mejor.
Usar una declaración de
case
en lugar de múltiples declaraciones deif/else
podría hacer que el código sea más legible y más fácil de entender. Además, las variablesremove_top
yremove_bottom
podrían combinarse en una sola declaración utilizando el métodoslice
de Ruby.Una posible versión refactorizada del método:
Esta versión utiliza los métodos
first
ylast
para obtener los primeros o últimosparams[:limit]
número de ids de caso respectivamente. El bloqueelse
se ha simplificado combinandoremove_top
yremove_bottom
en una sola llamada aslice
. También llamamos a.to_f
en la división dentro del métodoslice
para asegurar un redondeo adecuado.