Letterali a corda

Gli oggetti stringa contengono sequenze ordinate di byte, in genere caratteri, in genere per formare pezzi di testo leggibile dall'uomo. Sono un tipo di oggetto molto comune in tutti i linguaggi di programmazione e Ruby ha una serie di modi di alto livello e alcuni di basso livello per creare, accedere e manipolare oggetti String.

Le stringhe vengono spesso create con a String letterale. Un letterale è una sintassi speciale nel linguaggio Ruby che crea un oggetto di un tipo specifico. Per esempio, 23 è un letterale che crea un Fixnum oggetto. Per quanto riguarda i letterali String, ci sono diverse forme.

Stringhe singole e doppie virgolette

La maggior parte delle lingue ha una stringa letterale simile a questa, quindi potrebbe essere familiare. I tipi di virgolette "(virgoletta singola, apostrofo o citazione dura) e "(virgolette doppie o citazione morbida) vengono utilizzati per racchiudere letterali stringa, qualsiasi cosa tra loro verrà trasformata in oggetti String. L'esempio seguente lo dimostra.

Ma ci sono alcune differenze tra virgolette singole e doppie. Virgolette doppie o virgolette abilitare un po 'di magia dietro le quinte. La più utile è l'interpolazione all'interno delle stringhe, utile per inserire il valore di una variabile nel mezzo di una stringa. Ciò si ottiene utilizzando il # ... sequenza. L'esempio seguente ti chiederà il tuo nome e ti saluterà, usando l'interpolazione per inserire il tuo nome nel valore letterale di stringa stampato.

Si noti che qualsiasi codice può essere inserito tra parentesi graffe, non solo nomi di variabili. Ruby valuterà quel codice e qualunque cosa venga restituita tenterà di inserirlo nella stringa. Quindi potresti facilmente dirlo "Ciao, # gets.chomp" e dimenticare il nome variabile. Tuttavia, è buona norma non inserire espressioni lunghe tra parentesi graffe.

Virgolette singole, apostrofi o virgolette sono molto più restrittivi. All'interno delle virgolette singole, Ruby non eseguirà interpolazioni o sequenze di escape se non quella di sfuggire al carattere di virgoletta singola e di backslash stesso\' e \\ rispettivamente). Se non si intende utilizzare l'interpolazione, si consiglia di utilizzare virgolette singole più spesso.

L'esempio seguente tenterà di interpolare una variabile all'interno di virgolette singole.

Se esegui questo non otterrai errori, ma cosa verrà stampato?

La sequenza di interpolazione è stata passata senza interpretazione.

Quando dovrei usare le virgolette singole e doppie

Questa è una questione di stile. Alcuni preferiscono usare le doppie virgolette tutto il tempo a meno che non diventino scomode. Altri preferiscono utilizzare virgolette singole a meno che non sia previsto il comportamento di interpolazione. Non c'è nulla di intrinsecamente pericoloso sull'utilizzo di virgolette doppie per tutto il tempo, ma facilita la lettura del codice. Non devi leggere una stringa quando leggi il codice se sai che non ci sono interpolazioni perché sai che la stringa stessa non avrà effetti collaterali. Quindi quale forma letterale di stringa usi dipende da te, non esiste un vero modo giusto o sbagliato qui.

Sequenze di escape

Cosa succede se, in una stringa letterale, si desidera includere un carattere di citazione? Ad esempio, la stringa "Steve ha detto" Moo! " non funzionerà. E nemmeno lo farà "Non posso toccarlo!". Entrambe queste stringhe includono il carattere di virgolette all'interno della stringa, terminando effettivamente la stringa letteralmente e causando un errore di sintassi. Potresti cambiare i caratteri di citazione, come 'Steve ha detto "Moo!"', ma questo non risolve davvero il problema. Invece, puoi evitare qualsiasi carattere tra virgolette all'interno della stringa e perderà il suo significato speciale (in questo caso, il significato speciale è chiudere la stringa).

Per sfuggire a un personaggio, aggiungilo al carattere barra rovesciata. Il carattere barra rovesciata dice a Ruby di ignorare qualsiasi significato speciale che potrebbe avere il personaggio successivo. Se è un carattere di virgolette corrispondente, non terminare la stringa. Se è un segno di hash, non avviare un blocco di interpolazione. L'esempio seguente mostra questo uso della barra rovesciata per sfuggire ai caratteri speciali.

Il carattere barra rovesciata può essere utilizzato per rimuovere qualsiasi significato speciale dal seguente carattere ma, confusamente, può anche essere usato per indicare un comportamento speciale nelle stringhe tra virgolette doppie. La maggior parte di questi comportamenti speciali ha a che fare con l'inserimento di caratteri e sequenze di byte che non possono essere digitati o rappresentati visivamente. Non tutte le stringhe sono stringhe di caratteri o possono contenere sequenze di controllo destinate al terminale e non all'utente. Ruby ti dà la possibilità di inserire questi tipi di stringhe usando il carattere escape barra rovesciata.

  • \ n - Un carattere di nuova riga. Il mette il metodo lo fa automaticamente, ma se si desidera inserirne uno nel mezzo di una stringa o la stringa è destinata a qualcosa di diverso da mette metodo, è possibile utilizzare questo per inserire una nuova riga in una stringa.
  • \ t - Un carattere di tabulazione. Il carattere di tabulazione sposta il cursore sopra (sulla maggior parte dei terminali) su un multiplo di 8, quindi è molto utile per visualizzare i dati tabulari. Tuttavia, ci sono modi migliori per farlo, e l'uso del carattere tab è considerato un po 'arcaico o hacker.
  • \ nnn - Una barra rovesciata seguita da 3 numeri indica un carattere ASCII rappresentato da 3 cifre ottali. Perché ottale? Principalmente per motivi storici.
  • \ xnn - Una barra rovesciata, una x e 2 cifre esadecimali. Lo stesso della versione ottale, solo con cifre esadecimali.

Probabilmente non userete mai la maggior parte di questi, ma sappiate che esistono. E ricorda anche che funzionano solo con stringhe tra virgolette doppie.