Crystal ha un tipo noto come String, usato per rappresentare il testo.
Le stringhe di Crystal sono sequenze di caratteri Unicode.
Le stringhe sono immutabili: una volta create non possono essere modificate.
Questo significa che ogni volta che modifichi una stringa ne viene creata una nuova; quindi la stringa originale non viene modificata.
Per definire una stringa si usano le virgolette doppie ".
"Hello World"
Per concatenare due stringhe, usa l'operatore +.
L'operatore + restituisce una nuova stringa che combina le due stringhe.
hello = "Hello"
hello + " World"
# => "Hello World"
Il metodo to_i converte una stringa in un numero intero.
In alternativa, il metodo to_f può essere usato per ottenere un numero in virgola mobile.
Se la stringa non può essere convertita in un numero, viene sollevato un ArgumentError.
"1".to_i
# => 1
"1.0".to_f
# => 1.0
"Hello".to_i
# => ArgumentError: Invalid integer: Hello
Un numero intero o un numero in virgola mobile può essere convertito in una stringa usando il metodo to_s.
1.to_s
# => "1"
1.0.to_s
# => "1.0"
L'interpolazione è un modo comodo per combinare stringhe e incorporare espressioni nelle stringhe.
Per interpolare una stringa, puoi usare il carattere # seguito da parentesi graffe {} con l'espressione all'interno delle parentesi.
name = "World"
"Hello #{name}!"
# => "Hello World!"
Crystal converte automaticamente il risultato dell'espressione in una stringa.
"Hello #{1 + 1}!"
# => "Hello 2!"
Quando hai bisogno di sapere il numero di caratteri in una stringa, puoi usare il metodo size, che restituisce la lunghezza della stringa come numero intero.
La dimensione di una stringa è una proprietà memorizzata della stringa, quindi non è necessario calcolarla ogni volta che chiami il metodo: questo la rende molto veloce.
"Hello World".size
# => 11
L'indicizzazione è quando vuoi ottenere un carattere specifico da una stringa.
Per ottenere un carattere da una String puoi usare la solita notazione con parentesi quadre.
[] è implementato come metodo di istanza di String, dove l'indice è l'argomento del metodo.
In Crystal, il primo carattere di una stringa è all'indice 0.
"Hello World"[0]
# => 'H'
"Hello World"[6]
# => 'W'
Per ottenere un carattere dalla fine di una stringa, puoi prendere la lunghezza della stringa meno uno per ottenere l'indice dell'ultimo carattere, e per ottenere il penultimo carattere, puoi prendere la lunghezza della stringa meno due, e così via. Esiste una scorciatoia: basta usare un indice negativo, dove l'ultimo carattere è all'indice -1, il penultimo è all'indice -2, e così via.
name = "Hello World"
name[name.size - 1]
# => 'd'
name[-1]
# => 'd'
Alcuni caratteri non possono essere scritti direttamente in una stringa: devi usare una sequenza di escape.
Per esempio, se vuoi usare le virgolette doppie in una stringa, devi fare l'escape delle virgolette doppie.
Puoi usare il carattere \ per scrivere una sequenza di escape seguita dal carattere di cui vuoi fare l'escape.
Questi sono i caratteri speciali in Crystal:
| Valore | Descrizione |
|---|---|
\a |
Avviso |
\b |
Backspace |
\e |
Escape |
\f |
Avanzamento modulo |
\n |
Avanzamento riga o nuova riga |
\r |
Ritorno carrello |
\t |
Tabulazione orizzontale |
\v |
Tabulazione verticale |
\\ |
Barra rovesciata |
\' |
Virgoletta singola |
\" |
Virgoletta doppia |
\377 |
Carattere ASCII ottale |
\xFF |
Carattere ASCII esadecimale |
\uFFFF |
Carattere Unicode esadecimale |
puts "Hello \"World\""
# => Hello "World"
puts "Hello \nWorld"
# => Hello
# => World
Per scrivere una stringa multilinea, usi la stessa sintassi di una stringa su una sola riga, ma vai a capo per ogni riga che vuoi includere nella stringa.
"Hello
World"
# => "Hello\nWorld"
C'era una volta un programmatore eccentrico che viveva in una strana casa con le finestre sbarrate. Un giorno accettò un incarico da una bacheca di annunci di lavoro online per costruire un robot per le feste. Il robot dovrebbe salutare le persone e accompagnarle al loro posto. La prima edizione era molto tecnica e mostrava la scarsa capacità del programmatore di interagire con gli esseri umani. Alcune di queste caratteristiche sono confluite anche nell'edizione successiva.
Implementa il metodo welcome in modo che restituisca un messaggio di benvenuto usando il nome fornito:
PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!
Implementa il metodo happy_birthday in modo che restituisca un messaggio di compleanno usando il nome e l'età della persona.
Purtroppo il programmatore è un po' un esibizionista, quindi il robot deve dimostrare di conoscere il compleanno di ogni invitato.
PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!
Implementa la funzione assign_table per dare le indicazioni.
Dovrebbe accettare 5 parametri.
String)Int)String)String)Float64)Il formato esatto del risultato è visibile nell'esempio qui sotto.
Il nome della persona che siede accanto va abbreviato con la prima e l'ultima lettera del nome. Frank diventa Fk, Christian diventa Cn, e così via.
Il robot fornisce il numero del tavolo. Il robot menziona anche la distanza del tavolo. Fortunatamente solo con una precisione limitata a 1 cifra.
PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.