Crystal tem um tipo chamado String, que serve para representar texto.
As strings de Crystal são sequências de carateres Unicode.
As strings são imutáveis, ou seja, não podem ser alteradas depois de criadas.
Isto significa que é criada uma nova string sempre que modificas uma string; por isso, a string original não é alterada.
Para definir uma string, usas aspas duplas ".
"Hello World"
Para concatenar duas strings, usa o operador +.
O operador + devolve uma nova string que combina as duas strings.
hello = "Hello"
hello + " World"
# => "Hello World"
O método to_i converte uma string num número inteiro.
Em alternativa, o método to_f pode ser usado para devolver um número de vírgula flutuante.
Se a string não puder ser convertida num número, é lançado um ArgumentError.
"1".to_i
# => 1
"1.0".to_f
# => 1.0
"Hello".to_i
# => ArgumentError: Invalid integer: Hello
Um número inteiro ou de vírgula flutuante pode ser convertido numa string com o método to_s.
1.to_s
# => "1"
1.0.to_s
# => "1.0"
A interpolação é uma forma prática de combinar strings e de incorporar expressões em strings.
Para interpolar uma string, podes usar o caráter # seguido de chavetas {}, com a expressão dentro das chavetas.
name = "World"
"Hello #{name}!"
# => "Hello World!"
Crystal converte automaticamente o resultado da expressão numa string.
"Hello #{1 + 1}!"
# => "Hello 2!"
Quando precisas de saber o número de carateres de uma string, podes usar o método size, que devolve o comprimento da string como número inteiro.
O tamanho de uma string é uma propriedade armazenada da string, por isso não é preciso calculá-lo sempre que chamas o método, o que torna o método muito rápido.
"Hello World".size
# => 11
A indexação permite-te obter um caráter específico de uma string.
Para obteres um caráter de uma String, podes usar a conhecida notação de parênteses retos.
[] está implementado como um método de instância de String, em que o índice é o argumento do método.
Em Crystal, o primeiro caráter de uma string está no índice 0.
"Hello World"[0]
# => 'H'
"Hello World"[6]
# => 'W'
Para obteres um caráter do fim de uma string, podes usar o comprimento da string menos um para chegares ao índice do último caráter; para o penúltimo caráter, usas o comprimento da string menos dois, e assim sucessivamente. Há um atalho para isto: basta usares um índice negativo, em que o último caráter está no índice -1, o penúltimo está no índice -2, e assim sucessivamente.
name = "Hello World"
name[name.size - 1]
# => 'd'
name[-1]
# => 'd'
Alguns carateres não podem ser escritos diretamente numa string; para isso, tens de usar uma sequência de escape.
Por exemplo, se quiseres usar aspas duplas numa string, tens de as escapar.
Podes usar o caráter \ para escrever uma sequência de escape seguida do caráter que queres escapar.
Estes são os carateres especiais em Crystal:
| Value | Description |
|---|---|
\a |
Alerta |
\b |
Retrocesso |
\e |
Escape |
\f |
Avanço de página |
\n |
Avanço de linha ou nova linha |
\r |
Retorno de carro |
\t |
Tabulação horizontal |
\v |
Tabulação vertical |
\\ |
Barra invertida |
\' |
Aspas simples |
\" |
Aspas duplas |
\377 |
Caráter ASCII octal |
\xFF |
Caráter ASCII hexadecimal |
\uFFFF |
Caráter Unicode hexadecimal |
puts "Hello \"World\""
# => Hello "World"
puts "Hello \nWorld"
# => Hello
# => World
Para escreveres uma string com várias linhas, usas a mesma sintaxe de uma string de uma só linha, mas mudas de linha a cada linha que queres incluir na string.
"Hello
World"
# => "Hello\nWorld"
Era uma vez um programador excêntrico que vivia numa casa estranha com janelas com grades. Um dia, aceitou um trabalho numa plataforma de ofertas de emprego online para construir um robô de festas. O robô devia cumprimentar as pessoas e ajudá-las a chegar aos seus lugares. A primeira edição era muito técnica e mostrava a falta de interação humana do programador. Parte disso também passou para a edição seguinte.
Implementa o método welcome para devolver uma mensagem de boas-vindas com o nome indicado:
PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!
Implementa o método happy_birthday para devolver uma mensagem de aniversário com o nome e a
idade indicados da pessoa.
Infelizmente, o programador é um pouco exibicionista, por isso o robô tem de demonstrar que
sabe o aniversário de todos os convidados.
PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!
Implementa a função assign_table para dar indicações.
Deve aceitar 5 parâmetros.
String)Int)String)String)Float64)O formato exato do resultado pode ver-se no exemplo abaixo.
O nome do vizinho de mesa deve ser encurtado para a primeira e a última letra do nome. Frank passa a Fk, Christian passa a Cn, e assim por diante.
O robô indica o número da mesa. O robô também menciona a distância da mesa. Felizmente, apenas com uma precisão limitada a 1 algarismo.
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.
Inscreve-te no Exercism para aprenderes e dominares Crystal com 26 conceitos142 exercícios, e mentoria humana real, tudo grátis.