Gli oggetti stringa tengono sequenze ordinate di byte, in genere caratteri, di solito per formare pezzi di testo leggibile dall'uomo. Sono un tipo di oggetto molto comune in tutti i linguaggi di programmazione e Rubino 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 unFixnum 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 valori 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à alcuna interpolazione o sequenze di fuga oltre a sfuggire al carattere di virgoletta singola e alla barra rovesciata stessa (\' 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 sfuggire a 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.
La pagina successiva tratta stringhe multilinea e una sintassi alternativa per i letterali di stringa.
Stringhe multilinea
La maggior parte delle lingue non consente valori letterali a più righe, ma Ruby lo fa. Non è necessario terminare le stringhe e aggiungere altre stringhe per la riga successiva, Ruby gestisce letterali di stringa multilinea proprio con l'impostazione predefinita sintassi.
Sintassi alternativa
Come con la maggior parte degli altri letterali, Ruby fornisce una sintassi alternativa per i letterali di stringa. Se stai usando molti caratteri di citazione all'interno dei tuoi letterali, ad esempio, potresti voler usare questa sintassi. Quando si utilizza questa sintassi è una questione di stile, di solito non sono necessari per le stringhe.
Per utilizzare la sintassi alternativa, utilizzare la seguente sequenza per stringhe a virgoletta singola % q {…}. Allo stesso modo, utilizzare la sintassi seguente per stringhe tra virgolette doppie % Q {…}. Questa sintassi alternativa segue le stesse regole dei loro cugini "normali". Inoltre, tieni presente che puoi utilizzare tutti i personaggi che desideri anziché le parentesi graffe. Se usi una parentesi graffa, una parentesi quadra, una parentesi angolare o una parentesi, il carattere corrispondente termina il valore letterale. Se non si desidera utilizzare caratteri corrispondenti, è possibile utilizzare qualsiasi altro simbolo (qualsiasi cosa diversa da una lettera o un numero). Il letterale verrà chiuso con un altro dello stesso simbolo. L'esempio seguente mostra diversi modi per utilizzare questa sintassi.
La sintassi alternativa funziona anche come stringa multilinea.