Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJc
votos
121

Viniendo de un fondo de Python, donde siempre hay una forma correcta de hacerlo (una forma pitonica) cuando se trata de estilo, me pregunto si lo mismo existe para Ruby. He estado usando mis propias pautas de estilo pero estoy pensando en liberar mi código fuente, y me gustaría adherirme a las reglas no escritas que puedan existir.

¿Es The Ruby Way para escribir explícitamente returnen los métodos? Lo he visto hacerlo con y sin, pero ¿hay una forma correcta de hacerlo? ¿Hay quizás un buen momento para hacerlo? Por ejemplo:

def some_func(arg1, arg2, etc)
  # Do some stuff...
  return value # <-- Is the 'return' needed here?
endLeopardo Chaquetas Mujer Mujer Adidas Leopardo Chaquetas Adidas Chaquetas Adidas Mujer Chaquetas Leopardo O8nmNv0w
Lady Motorbike Store Lola Dainese D1 En Chaqueta rWBxoeQdC
Publicado el 2009-06-21 a las 01:38
fuente por usuario

8 Respuestas

votos
0

Como dijo Ben. El hecho de que "el valor de retorno de un método ruby ​​es el valor de retorno de la última declaración en el cuerpo de la función" hace que la palabra clave return se use raramente en la mayoría de los métodos ruby.

Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJc
def some_func_which_returns_a_list( x, y, z)
  return nil if failed_some_early_check


  # function code 

  @list     # returns the list
end
Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJc
Publicado el 2009-06-21 a las 01:50
quelle vom benutzer

12 Niños De Biomecanics By Niñas GarvalinShoes Mejores Y Imágenes EIYH9WD2
votos
1

Es una cuestión de qué estilo prefiere en su mayor parte. Debe usar la palabra clave return si desea regresar desde algún lugar en medio de un método.

Publicado el 2009-06-21 a las 01:54
ModaChaqueta En NegroCamisa Blanco De Piel Y Look Vestir kXZiPOu quelle vom benutzer

Estoy de acuerdo con Ben Hughes y de acuerdo con Tim Holt, porque la pregunta menciona la forma definitiva Python lo hace y le pregunta si Ruby tiene un estándar similar.

Lo hace.

Esta es una característica bien conocida de la lengua que nadie esperaba para depurar un problema en rubí razonablemente se debe esperar a saber de él.

Publicado el 2015-01-30 a las 18:49
quelle vom benutzer Rosado Borgoña Encaje Cuero Otoño De Negro Pu Mujer La Para Chaqueta K1lFcJ

votos

Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJc

7

La guía de estilo declara, que no debería estar utilizando returnen su última declaración. Todavía se puede utilizar si no es el último

. Esta es una de las convenciones que la comunidad de forma estricta, por lo que en caso de que si va a colaborar con cualquier persona que utilice Ruby.


Dicho esto, el argumento principal para utilizar explícita returns es que es confuso para las personas procedentes de otros idiomas.

  • En primer lugar, esto no es totalmente exclusivo de Ruby. Por ejemplo Perl tiene rendimientos implícitos también.
  • En segundo lugar, la mayoría de la gente que esto se aplica a vienen de idiomas Algol. La mayoría de los que están muy por "nivel inferior" de Ruby, por lo tanto, usted tiene que escribir más código para hacer algo.

Una heurística común para la longitud método (excluyendo getters / setters) en Java es una pantalla . En ese caso, no se puede estar viendo la definición del método y / o ya han olvidado de donde regresaban de.

Por otro lado, en Ruby lo mejor es atenerse a métodos menos de 10 líneas largas . Teniendo en cuenta que, uno podría preguntarse por qué tiene que escribir ~ 10% más declaraciones, cuando están claramente implicados.


Dado que Ruby no tiene huecos métodos y todo lo que es mucho más concisa, se acaba de agregar gastos generales para ninguno de los beneficios si vas con explícitas Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJcreturns.

Publicado el 2016-01-24 a las 12:00
quelle vom benutzer

Hasta Pequeñas Cuero Genuino Tobillos De 2015 Botas Tacón Los xeBoCd
votos
13

En realidad lo importante es distinguir entre:

  1. Funciones - métodos ejecutados por su valor de retorno
  2. Procedimientos - métodos ejecutados por sus efectos secundarios

Ruby no tiene una forma nativa de distinguir estos - que deja vulnerable a escribir un procedimiento side_effect()y otro desarrollador decidir abusar del valor de retorno implícito de su procedimiento (básicamente, tratándolo como una función impuro).Zapatos Para Vestir By Karston De MujerBeigenatural Madison FlcTK135uJ

Para resolver esto, tomar una hoja de Scala y Haskell del libro y tienen sus procedimientos regresan de forma explícita nil(aka Unito ()en otros idiomas).

Si sigue este, a continuación, utilizando explícita returnde sintaxis o no sólo se convierte en una cuestión de estilo personal.

A fin de distinguir entre las funciones y procedimientos:

  1. Copiar buena idea de Jörg W Mittag de escribir bloques funcionales con llaves, y los bloques de procedimiento con do/end
  2. Cuando se invoca procedimientos, uso (), mientras que cuando se invoca funciones, no lo hacen

Tenga en cuenta que Jörg W Mittag realidad defendía al revés - evitando ()s para los procedimientos - pero eso no es aconsejable, ya que desea secundarios efectuar llamadas de métodos para poder distinguirse claramente de las variables, particularmente cuando aridad es 0. Consulte la guía de estilo Scala en la invocación de métodos para detalles.

Zapatos Aro Especial Mujer Mujer Aro Especial Precio Zapatos Zapatos Precio 3AqLc4j5R
Publicado el 2013-07-30 a las 10:09
Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJcquelle vom benutzer

MujerPosot De Ballerinas Cherokee Zapatos Class bfY6g7y
votos
30

Yo personalmente uso la returnpalabra clave para distinguir entre lo que llamo métodos funcionales , es decir, los métodos que se ejecutan principalmente por su valor de retorno, y los métodos de procedimiento que se ejecutan principalmente para sus efectos secundarios. Entonces, los métodos en los que el valor de retorno es importante, obtenga una returnpalabra clave adicional para llamar la atención sobre el valor de retorno.

Utilizo la misma distinción cuando llamo a métodos: los métodos funcionales obtienen paréntesis, los métodos de procedimiento no.

Y por último, pero no menos importante, también uso esa distinción con bloques: los bloques funcionales obtienen llaves, bloques de procedimientos (es decir, bloques que "hacen" algo) obtienen do/ end.

Sin embargo, trato de no ser religioso al respecto: con bloques, llaves y do/ o endprecedencia diferente, y en lugar de agregar paréntesis explícitos para desambiguar una expresión, simplemente cambio al otro estilo. Lo mismo ocurre con las llamadas a métodos: si agregar paréntesis alrededor de la lista de parámetros hace que el código sea más legible, lo hago, incluso si el método en cuestión es de naturaleza de procedimiento.

Publicado el 2009-06-21 a las 06:29 Zapatos Para Botines Hebillas Casual Mujer Versace Con Botas 5R3Lq4Aj
quelle vom benutzer

votos
63
Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJc

No. El buen estilo de Ruby generalmente solo usaría un retorno explícito para un retorno anticipado . Ruby es grande en el minimalismo de código / magia implícita.

Dicho esto, si un retorno explícito hace las cosas más claras o más fáciles de leer, no dañará nada.

Publicado el 2009-06-21 a las 01:41
quelle vom benutzer

Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJc
Baratas Run Nike Camo Thea Roshe ContrareembolsoDesert YyfIb76gvm
votos
185

Edad (y "respondió") pregunta, pero voy a echar en mi granito de arena como una respuesta.

TL; DR - Usted no tiene que, pero puede hacer que el código mucho más claro en algunos casos.

Aunque no es el uso de un rendimiento explícito puede ser "el camino Ruby", es confuso para los programadores que trabajan con código desconocido, o no están familiarizados con esta característica de Ruby.

Por ejemplo, uno podría tener un poco de función como esta, que añade uno al número pasado, y lo asigna a una variable de instancia.

def plus_one_to_y(x)
    @y = x + 1
end

Se esta destinado a ser una función que devuelve un valor, o no? Es muy difícil decir lo que significaba el desarrollador, ya que tanto asigna la variable de instancia, y devuelve el valor asignado también.

Supongamos mucho más tarde, otro programador (quizás no tan familiarizados con la forma de Ruby hace rendimientos en base a la última línea de código que se ejecuta) llega y quiere poner en algunas declaraciones de impresión para la explotación forestal y la función se convierte en esto ...

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
end
Chaqueta Fleece Béisbol Impresión Cuero De La Qitunc Pu Hombres 4j3AL5R

Ahora la función se rompe si algo espera un valor devuelto . Si no espera un valor devuelto, está bien. Es evidente que si en algún lugar más abajo en la cadena de código, algo de llamar a esta espera un valor devuelto, va a fracasar, ya que no está poniendo de nuevo lo que espera.

La verdadera pregunta ahora es la siguiente: ¿Hubo algo realmente esperar un valor devuelto? ¿Esta romper algo o no? Va a romper algo en el futuro? ¡Quién sabe! Sólo una revisión de código completo de todas las llamadas le permitirá saber.

Así que para mí, al menos, el mejor enfoque consiste en la práctica, ya sea ser muy explícita que va a devolver algo si importa, o nada en absoluto volver.

Así, en el caso de nuestra pequeña función de demostración, en el supuesto que queríamos que devuelve un valor, que se escribiría así ...

Amarillo Zapatillas Atmosférico Oferta Puma Para Mujer Especial De l1TF3KJc
def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    return @y
end

Y sería muy claro para cualquier programador que no devuelve ningún valor, y mucho más difícil para ellos para romperlo sin darse cuenta.

Alternativamente, se podría escribir como este y dejar de lado la instrucción de retorno ...

def plus_one_to_y(x)
    @y = x + 1
    puts "In plus_one_to_y"
    @y
end

Pero ¿por qué molestarse dejando de lado la palabra cambio? ¿Por qué no sólo hay que poner en allí y que sea 100% claro lo que está pasando? Es, literalmente, no tienen ningún impacto en la capacidad de su código para realizar.