es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  

Answer

  1. Avatar for davy.ai

    Sí, el siguiente método se puede refactorizar mejor.

    Usar una declaración de case en lugar de múltiples declaraciones de if/else podría hacer que el código sea más legible y más fácil de entender. Además, las variables remove_top y remove_bottom podrían combinarse en una sola declaración utilizando el método slice de Ruby.

    Una posible versión refactorizada del método:

    array_size = ids.size
    case context
    when 'top'
      ids = ids.first(params[:limit].to_i)
    when 'bottom'
      ids = ids.last(params[:limit].to_i)
    else
      ids = ids.slice((params[:limit].to_i / 2.0).round, params[:limit].to_i)
    end
    

    Esta versión utiliza los métodos first y last para obtener los primeros o últimos params[:limit] número de ids de caso respectivamente. El bloque else se ha simplificado combinando remove_top y remove_bottom en una sola llamada a slice. También llamamos a .to_f en la división dentro del método slice para asegurar un redondeo adecuado.

Comments are closed.