2012-03-31 17 views
6

Entiendo la diferencia funcional entre comillas simples y dobles en Ruby, pero me pregunto qué razones concretas tienen las personas para variar entre las dos. En mi opinión, parece que siempre debes usar una comilla doble, y no pensar en ello.¿Hay alguna ventaja en _ever_ usando una sola comilla alrededor de una cadena en Ruby/Rails?

Un par de razones que he leído en la investigación de este tema ...

  1. Utilice una comilla menos que se requiera una doble cita.

  2. Hay una ventaja de rendimiento muy, muy leve en una sola cotización.

¿Algún otro pensamiento interesante por ahí? (O tal vez este es un caso de la libertad o Ruby dejando la puerta abierta para que nadie manera correcta de hacer algo ...)

+0

Creo que hay una pregunta que examina si las comillas simples son más rápidas. –

+1

[aquí] (http://stackoverflow.com/questions/6395288/ruby-double-vs-single-quotes) entre muchas otras preguntas. La interpolación de cadenas es la gran razón. Sin embargo, Jorg tuvo una buena respuesta aquí. – Jonathan

Respuesta

10

por lo general siguen la siguiente regla:

Nunca uso de comillas dobles (o %Q o %W) si no interpolar

La razón de esto es que si Si intenta rastrear un error o una falla de seguridad, inmediatamente al mirar el comienzo de la cadena, inmediatamente se percata de que no puede contener ningún código, por lo tanto, el error no puede estar allí.

Sin embargo, también sigo la siguiente excepción a la regla:

uso de comillas dobles si hacen que el código sea más legible

es decir, Yo prefiero

"It's time" 

sobre

'It\'s time' 
%q{It's time} 

Técnicamente es cierto que cadenas entre comillas sencillas son infinitamente más rápido que analizar que las cadenas entre comillas dobles, pero eso es irrelevante porque

  • sólo el programa obtiene Analizada una vez, durante el inicio, no hay diferencia en runtime rendimiento
  • la diferencia de rendimiento es realmente muy pequeña
  • el tiempo necesario para analizar cadenas es irrelevante en comparación con el tiempo necesario para analizar algunos de sintaxis más loco de Ruby

Por lo tanto, la respuesta a su pregunta es: sí, hay una ventaja, es decir, que puede detectar de inmediato si una cadena puede contener o no código.

0
1.9.2-p290 :004 > x = 3 
=> 3 
1.9.2-p290 :005 > "#{x}" 
=> "3" 
1.9.2-p290 :006 > '#{x}' 
=> "\#{x}" 

En cualquier otro caso, prefiero comillas simples, porque es más fácil de escribir y solo hace que el código sea menos sobresaliente para mis ojos.

+1

Una sola oración en la línea de "cadenas sueltas entre comillas no se interpola" o algo así respondería. El código es una gran ilustración del hecho, pero algunas personas podrían no entender qué está sucediendo (o no) aquí. (O tal vez lo hacen ahora, si leen comentarios. :)) – cHao

+3

el OP conocía la diferencia funcional entre los dos, afirmó que claramente – Castilho

+0

Bien, ambas respuestas hasta ahora hablan de lo mismo :) – Spyros

1

Supongo que usar una cadena de una sola cita es más rápido, ya que las comillas dobles permiten la interpolación de cadenas, y las cadenas de comillas simples no.

Esa es la única diferencia que conozco. Por esa razón, es probablemente la mejor manera de utilizar sólo una cadena entre comillas simples a menos que necesite cadena de interpolación:

num = 59 
"I ate #{num} pineapples"` 
1

Bueno, hay una gran cantidad de pelusa de la "ganancia de rendimiento" de cadenas entre comillas sencillas vs cadenas entre comillas dobles .

El hecho es que realmente no importa si no se interpola. Hay muchos puntos de referencia en la web que corroboran esa afirmación. (Some here at stackoverflow)

Personalmente, utilizo el doble para cadenas que tienen interpolación solo por el bien de la legibilidad. Prefiero ver las comillas dobles cuando las necesito. Pero, de hecho, hay métodos en Ruby para la interpolación de cadenas distintas de "doble citar" ellas:

%q{#{this} doesn't get interpolated} 

%Q{#{this} is interpolated} 
4

Se me ocurren tres razones para un solo uso y cadenas entre comillas:

  1. Se ven más limpia (la razón las uso)
  2. hacen que sea más fácil para crear una cadena que de otro modo tendría que escapar ('he said "yes"' vs "he said \"yes\"")
  3. son ligeramente más performante.
0

Desde que hice esta pregunta, descubrí este Ruby Style Guide no oficial que aborda esto, y muchas otras preguntas de estilo más que he tenido flotando en mi cabeza. Recomiendo echarle un vistazo.

Cuestiones relacionadas