2012-03-31 13 views
6

Capisco la differenza funzionale tra virgolette singole e doppie in Ruby, ma mi chiedo quali sono le ragioni concrete che le persone hanno per variare tra i due. Nella mia mente sembra che dovresti sempre usare una doppia citazione e non pensarci.C'è qualche vantaggio per _ever_ usare una virgoletta singola attorno a una stringa in Ruby/Rails?

Un paio di motivazioni che ho letto nella ricerca sul tema ...

  1. utilizzare una singola citazione a meno che non è necessario un doppio apice.

  2. C'è un vantaggio di prestazioni molto, molto piccolo per le virgolette singole.

Altri pensieri interessanti là fuori? (O forse questo è un caso di libertà o Ruby lasciando la porta aperta per un modo giusto di fare qualcosa ...)

+0

Penso che ci sia una domanda che esamina se le virgolette singole sono più veloci. –

+1

[qui] (http://stackoverflow.com/questions/6395288/ruby-double-vs-single-quotes) tra molte altre domande. L'interpolazione delle stringhe è la grande ragione. Jorg ha avuto una buona risposta qui però. – Jonathan

risposta

10

Io di solito seguono la seguente regola:

citazioni

mai uso matrimoniali (o %Q o %W) se non si interpolare

La ragione di questo è che se stai cercando di rintracciare un errore o un bug di sicurezza, sai immediatamente quando si guarda all'inizio della stringa che non può esserci alcun codice al suo interno, quindi il bug non può essere lì dentro.

Tuttavia, ho anche seguire la seguente eccezione alla regola: le doppie virgolette

uso se fanno il codice più leggibile

Vale a dire Io preferisco

"It's time" 

oltre

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

Tecnicamente è vero che singole stringhe tra virgolette, sono infinitamente più veloce da analizzare rispetto doppie stringhe tra virgolette, ma questo è irrilevante perché

  • il programma solo ottiene analizzato una volta, durante l'avvio, non c'è differenza nel tempo di esecuzione
  • la differenza di prestazioni è davvero estremamente piccolo
  • il tempo necessario per analizzare le stringhe è irrilevante rispetto al tempo necessario per analizzare alcune delle sintassi più pazza di Ruby

Quindi, la risposta alla tua domanda è: sì, c'è un vantaggio, ovvero che puoi individuare subito se una stringa può contenere o meno un codice.

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

In ogni altro caso, preferisco virgolette singole, perché è più facile da digitare e rende solo il codice meno overbloated ai miei occhi.

+1

Una singola frase sulla falsariga di "stringhe con quotatura singola non interpola" o qualcosa farebbe questa risposta. Il codice è un'ottima dimostrazione del fatto, ma alcune persone potrebbero non capire cosa sta succedendo (o non lo è). (O forse lo fanno adesso, se leggono i commenti :) :) – cHao

+3

l'OP conosceva la differenza funzionale tra i due, affermava chiaramente che – Castilho

+0

Beh ok, entrambe le risposte finora parlano della stessa cosa però :) – Spyros

1

Suppongo che l'utilizzo di una stringa con quotatura singola sia più veloce, poiché le virgolette doppie consentono l'interpolazione della stringa e le stringhe con quotatura singola non lo fanno.

Questa è l'unica differenza che conosco. Per questo motivo, è probabilmente meglio utilizzare solo una stringa singolo indicata a meno che avete bisogno di interpolazione di stringhe:

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

Beh, ci sono un sacco di fuzz sulla "guadagno di prestazioni" di stringhe tra virgolette singole vs doppie stringhe tra virgolette .

Il fatto è che non importa se non si interpola. Ci sono molti benchmark sul web che confermano questa affermazione. (Some here at stackoverflow)

Personalmente, io uso il doppio per le stringhe che hanno l'interpolazione solo per motivi di leggibilità. Preferisco vedere le doppie virgolette quando ne ho bisogno. Ma in realtà ci sono metodi in rubino per interpolazione stringhe diverse da "doppio citando" li:

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

%Q{#{this} is interpolated} 
4

Mi vengono in mente tre motivi per utilizzare singole stringhe tra virgolette:

  1. Sembrano più pulito (la ragione io li uso)
  2. Essi rendono più semplice creare una stringa si sarebbe altrimenti necessario per sfuggire ('he said "yes"' vs "he said \"yes\"")
  3. sono leggermente più performante.
0

Da quando ho fatto questa domanda ho scoperto questo non ufficiale Ruby Style Guide che risolve questo, e molte molte altre domande di stile che ho avuto in giro nella mia testa. Consiglio vivamente di provarlo.

Problemi correlati