289 votos

¿Por qué son los signos de exclamación utilizada en métodos de Ruby?

En Ruby algunos métodos tienen un signo de interrogación (?) que una pregunta como"?" que se pregunte si el objeto en cuestión se incluye, a continuación, devuelve true/false.

Pero, ¿por qué algunos métodos tienen signos de exclamación (!) donde otros no?

¿Qué significa esto?

342voto

tgamblin Puntos 25755

En general, los métodos que final ! indican que el método que se va a modificar el objeto del llamado. Ruby llama a estos "métodos peligrosos" debido a que el cambio de estado de que alguien pueda tener una referencia. He aquí un ejemplo sencillo de cadenas de caracteres:

foo = "A STRING"  # a string called foo
foo.downcase!     # modifies foo itself
puts foo          # prints modified foo

Esta es la salida:

a string

En las bibliotecas estándar, hay un montón de lugares que usted verá pares de nombre similar métodos, uno con el ! y uno sin. Los que no son llamados "métodos seguros", y se devolverá una copia de la original con los cambios aplicados a la copia, con el destinatario sin cambios. He aquí el mismo ejemplo sin el !:

foo = "A STRING"    # a string called foo
bar = foo.downcase  # doesn't modify foo; returns a modified string
puts foo            # prints unchanged foo
puts bar            # prints newly created bar

Este salidas:

A STRING
a string

Tenga en cuenta que esto es sólo una convención, pero un montón de ruby clases de seguir. También ayuda a mantener el seguimiento de lo que está haciendo modificado en el código.

88voto

Brian Carper Puntos 40078

El signo de exclamación, significa muchas cosas, y algunas veces usted no puede decir mucho de él, además de "esto es peligroso, ten cuidado".

Como otros han dicho, en los métodos estándar a menudo se usa para indicar un método que hace que un objeto a mutar, pero no los de siempre. Tenga en cuenta que muchos de los métodos estándar de cambio de su receptor y no tienen un signo de exclamación (pop, shift, clear), y de algunos de los métodos con los signos de exclamación no cambian su receptor (exit!). Ver este artículo por ejemplo.

Otras bibliotecas se pueden utilizar de una manera diferente. En los Rieles de un signo de exclamación a menudo significa que el método producirá una excepción en caso de error en lugar de fallar silenciosamente.

Es una convención de nomenclatura, pero muchas personas lo usan en formas sutilmente diferentes. En su propio código, una buena regla del pulgar es utilizar siempre un método que está haciendo algo "peligroso", sobre todo cuando los dos métodos con el mismo nombre y uno de ellos es más "peligroso" que el otro. "Peligroso" puede significar casi cualquier cosa, aunque.

40voto

Steven Huwig Puntos 8029

Esta convención de nomenclatura se levantó de Esquema.

1.3.5 convenciones de Nomenclatura

Por convención, los nombres de los procedimientos de que siempre devuelven un valor booleano por lo general terminan en `?". Tales procedimientos se denominan predicados.

Por convención, los nombres de los procedimientos de que almacenar los valores previamente asigna lugares (véase la sección 3.4) por lo general terminan en `!". Tales procedimientos se denomina mutación de los procedimientos. Por convención, el valor devuelto por una la mutación procedimiento no está especificado.

16voto

Pesto Puntos 16648

! normalmente significa que el método que actúa sobre el objeto en lugar de devolver un resultado. Desde el libro de Programación Ruby:

Los métodos que son dangerous,'' or modify the receiver, might be named with a trailing !"

8voto

Edward Castaño Puntos 302

De themomorohoax.com:

Una explosión puede utilizarse de la siguiente manera, en orden de mi preferencia personal.

1) Un registro activo método genera un error si el método no hacer lo que dice que hará.

2) Un registro activo método guarda el registro o un método ahorra un objeto (por ej. la franja!)

3) Un método algo "extra", como puestos a algún lugar, o no un poco de acción.

El punto es: use sólo una explosión cuando realmente has pensado acerca de si es necesario, para salvar a otros desarrolladores la molestia de tener que compruebe por qué usted está utilizando una explosión.

La explosión proporciona dos señales a otros desarrolladores.

1) que no es necesario guardar el objeto después de llamar a la método.

2) cuando se llama al método, el db se va a cambiar.

http://www.themomorohoax.com/2009/02/11/when-to-use-a-bang-exclamation-point-after-rails-methods

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X