O Crystal tem um tipo conhecido como String, usado para representar texto.
As strings do Crystal são sequências de caracteres Unicode.
As strings são imutáveis, ou seja, não podem ser alteradas depois de criadas.
Isso significa que uma nova string é criada toda vez que você modifica uma string; portanto, a string original não é alterada.
Para definir uma string, você usa aspas duplas ".
"Hello World"
Para concatenar duas strings, use o operador +.
O operador + retorna uma nova string, combinando as duas strings.
hello = "Hello"
hello + " World"
# => "Hello World"
O método to_i converte uma string em um número inteiro.
Como alternativa, o método to_f pode ser usado para retornar um número de ponto flutuante.
Se a string não puder ser convertida em número, um ArgumentError será lançado.
"1".to_i
# => 1
"1.0".to_f
# => 1.0
"Hello".to_i
# => ArgumentError: Invalid integer: Hello
Um número inteiro ou de ponto flutuante pode ser convertido em uma string usando 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 embutir expressões em strings.
Para interpolar uma string, você pode usar o caractere # seguido de chaves {}, com a expressão dentro das chaves.
name = "World"
"Hello #{name}!"
# => "Hello World!"
O Crystal converte automaticamente o resultado da expressão em uma string.
"Hello #{1 + 1}!"
# => "Hello 2!"
Quando você precisa saber o número de caracteres de uma string, pode usar o método size, que retorna o tamanho da string como um número inteiro.
O tamanho de uma string é uma propriedade armazenada da própria string, então não é preciso calculá-lo toda vez que você chama o método, o que o torna muito rápido.
"Hello World".size
# => 11
Indexação é quando você quer obter um caractere específico de uma string.
Para obter um caractere de uma String, você pode usar a conhecida notação de colchetes.
[] é implementado como um método de instância de String, em que o índice é o argumento do método.
O primeiro caractere de uma string está no índice 0.
"Hello World"[0]
# => 'H'
"Hello World"[6]
# => 'W'
Para obter um caractere do final de uma string, você pode pegar o tamanho da string menos um para chegar ao índice do último caractere; para o penúltimo caractere, o tamanho menos dois, e assim por diante. Existe um atalho para isso: basta usar um índice negativo, em que o último caractere está no índice -1, o penúltimo no índice -2, e assim por diante.
name = "Hello World"
name[name.size - 1]
# => 'd'
name[-1]
# => 'd'
Alguns caracteres não podem ser escritos diretamente em uma string; nesse caso, você precisa usar uma sequência de escape.
Por exemplo, se você quiser usar aspas duplas em uma string, precisa escapar as aspas duplas.
Você pode usar o caractere \ para escrever uma sequência de escape, seguido do caractere que quer escapar.
Estes são os caracteres especiais no Crystal:
| Valor | Descrição |
|---|---|
\a |
Alerta |
\b |
Backspace |
\e |
Escape |
\f |
Avanço de formulário |
\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 |
Caractere ASCII octal |
\xFF |
Caractere ASCII hexadecimal |
\uFFFF |
Caractere Unicode hexadecimal |
puts "Hello \"World\""
# => Hello "World"
puts "Hello \nWorld"
# => Hello
# => World
Para escrever uma string multilinha, use a mesma sintaxe de uma string de uma linha só, mas pule uma linha para cada linha que você quer na string.
"Hello
World"
# => "Hello\nWorld"
Era uma vez um programador excêntrico que morava numa casa estranha com grades nas janelas. Um dia, ele aceitou um trabalho de um site de vagas para construir um robô de festa. O robô deve cumprimentar as pessoas e ajudá-las a encontrar seus lugares. A primeira edição era muito técnica e mostrava o quanto o programador tinha pouca habilidade de convívio humano. Algumas dessas características também foram parar na edição seguinte.
Implemente o método welcome para retornar uma mensagem de boas-vindas usando o nome recebido:
PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!
Implemente o método happy_birthday para retornar uma mensagem de aniversário usando o nome e a idade da pessoa.
Infelizmente, o programador é um pouco exibido, então o robô precisa demonstrar que sabe o aniversário de cada convidado.
PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!
Implemente a função assign_table para indicar o caminho.
Ela deve aceitar 5 parâmetros.
String)Int)String)String)Float64)O formato exato do resultado pode ser visto no exemplo abaixo.
O nome do vizinho de mesa deve ser abreviado para a primeira e a última letra do nome. Frank vira Fk, Christian vira Cn, e assim por diante.
O robô informa o número da mesa. O robô também menciona a distância até a mesa. Felizmente, com uma precisão limitada a 1 dígito.
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.
Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.