Pacuna's Blog

Devolviendo call backs en ruby

Supongamos que nuestra aplicación ofrece un método para que otro usuario pueda utilizarlo. El usuario realizará cierta acción dependiendo de lo que nuestro método devuelva. Para simplificar, nuestro método entregará ‘true’ o ‘false’ y el cliente deberá implementar lo que debe ocurrir en cada caso.

Nuestro método verificará si 2 números son iguales:

def equal?(num1, num2)
  if num1 == num2
    true
  else
    false
  end
end

Luego el cliente que desee utilizar este método deberá escribir algo así:

if equal?(1, 2)
  puts "Los valores son iguales"
end

El uso de nuestro método no es ideal, y no es muy eloquente. Ya el hecho de tener que utilizar un condicional no es óptimo.

Una alternativa interesante es utilizar un bloque en caso de que nuestro método sea verdadero en vez de devolver un valor. Esta manera es mucho más elegante y eloquente. Reescribimos nuestros método:

def equal?(num1, num2, &equal_callback)
  unless num1 != num2
    equal_callback.call(num1, num2)
  end
end

En este caso nuestro método llamará al bloque entregado por el usuario en caso de que se cumpla la condición. Ahora el usuario puede usar nuestro método de una manera mas intuitiva y elegante:

equal?(var, var2) do |arg1, arg2|
  puts "los valores #{arg1} y #{2} son iguales"
end

Hemos eliminado el molesto condicional y agregamos la utilización de un bloque para que el usuario pueda definir funcionalidad.

A experimentar con este patrón!

View original

#ruby

- 1 toasts