rubi puede pokemon peso para omega jugar juegos eshop descargar 2ds ruby

ruby - puede - Cuando usar bloques



pokemon rubi omega peso (3)

Esto es lo que la gente de programación funcional llama "estilo de paso de continuación" . Es una técnica válida, aunque hay casos en los que tenderá a complicar las cosas más de lo que vale. Podría valer la pena volver a ver algunos de los lugares donde lo estás usando y ver si ese es el caso en tu código. Pero no hay nada inherentemente malo en ello.

¡Me encantan los bloques de rubí! La idea detrás de ellos es simplemente muy muy ordenada y conveniente.

Acabo de revisar mi código de la última semana, que es básicamente cada función de Ruby que he escrito , y he notado que ninguna de ellas devuelve un valor. ¡En lugar de devolver valores, siempre uso un bloque para devolver los datos!

Incluso me he sorprendido pensando en escribir una pequeña clase de estado que me permitiría escribir código como:

something.do_stuff do |status| status.success do # successful code end status.fail do # fail code puts status.error_message end end

¿Estoy usando bloques demasiado? ¿Hay un momento para usar bloques y un tiempo para usar valores de retorno?

¿Hay alguna trampa a tener en cuenta? ¿Mi gran uso de bloques vendrá y me morderá alguna vez?


Me gusta este estilo. En realidad es muy similar a Ruby, y a menudo verás proyectos reestructurando su código para usar este formato en lugar de algo menos legible.

Los valores de retorno tienen sentido donde los valores de retorno tienen sentido. Si tiene un objeto Article , desea que article.title devuelva el título. Pero para este ejemplo particular de devoluciones de llamada, es un estilo estelar, y es bueno que sepa cómo usarlos. Sospecho que muchos nuevos en Ruby nunca descubrirán cómo hacerlo bien.


Todo sería más legible como:

if something.do_stuff #successful code else #unsuccessful code end

o para usar un idioma común de los carriles:

if @user.save render :action=>:show else @user.errors.each{|attr,msg| logger.info "#{attr} - #{msg}" } render :action=>:edit end

En mi humilde opinión, evitar el retorno de un valor booleano es el uso excesivo de bloques de código.

Un bloque tiene sentido si. . .

Permite que el código use un recurso sin tener que cerrar ese recurso

open("fname") do |f| # do stuff with the file end #don''t have to worry about closing the file

El código de llamada tendría que hacer un cálculo no trivial con el resultado.

En este caso, evita agregar el valor de retorno al ámbito de llamada. Esto también a menudo tiene sentido con múltiples valores de retorno.

something.do_stuff do |res1, res2| if res1.foo? and res2.bar? foo(res1) elsif res2.bar? bar(res2) end end #didn''t add res1/res2 to the calling scope

El código debe ser llamado tanto antes como después del rendimiento.

Usted ve esto en algunos de los ayudantes de rieles:

<% content_tag :div do %> <%= content_tag :span "span content" %> <% end -%>

Y, por supuesto, los iteradores son un gran caso de uso, ya que son considerados por los rubíes más bonitos que los bucles o las listas de comprensión .

Ciertamente no es una lista exhaustiva, pero le recomiendo que no solo use bloques porque puede.