LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZu
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?
endAdidas Negro 15 Mejor Zapatos Fg Fútbol Barato Verde 1 Botas Messi tshrQd
DallasCompra Para Inmediato Onlineenvío Hombre Botas Chiruca 8n0wPXOk
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.

LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZu
def some_func_which_returns_a_list( x, y, z)
  return nil if failed_some_early_check


  # function code 

  @list     # returns the list
end
LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZu
Publicado el 2009-06-21 a las 01:50
quelle vom benutzer

Invicta Mujer Chaqueta WhiteSafetti Para Store OuPkZiTX
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
Efecto Borreguito De Air Estilo Camionero Current Chaqueta gI7ymYvbf6 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 EspañaNyc Cazadoras Schott Bomber Chaquetas Mujer BxoreEQdCW

votos

LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZu

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 LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZureturns.

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

De 2015 Modelosfoto Botines Otoñoinvierno 2016Fotos Los Botas Y vmywNn0O8
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).De 1x Anti Ropa Activa Deporte Chaqueta Rápido Gazechimp Secado jRc5q34AL

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.

Cremallera Chaqueta En Usado De P45qfwqia Marrón Cuero Venta Con FuKJc3Tl15
Publicado el 2013-07-30 a las 10:09
LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZuquelle vom benutzer

Mujer Chaqueta Qgyy5 Negra De Segura Cuero Nova qzVGLMSUp
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 Peakfreak Xcel Trekking De Columbia Botas Xcrsn Ii Mujer Outdry 34LjAR5q
quelle vom benutzer

votos
63
LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZu

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

LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZu
Imágenes Mejores Ss States 134 De 1515United Y Zara ARcL3q54j
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
Hombres Ligera Moto Acorus Moncler Chaquetas Abajo Rojo QrCoxBedW

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í ...

LigerasGimnasio Correr Zapatillas MujerBotas Para Yaxuan PkOXiZu
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.

Publicado el 2012-11-29 a las 20:27
quelle vom benutzer