Bom, agora que estamos trabalhando com strings, que são basicamente um conjunto de caracteres, podemos começar a manipulálos com Crystal! Veja só:
text = "crystal4noobs"
puts text.size # Utilizado para mostrar o tamanho da string! Neste caso o resultado será 13!
puts text.reverse # Utilizado para mostrar a string reversa! Neste caso o resultado será 'sboon4latsyrc'!
Uma peculiaridade interessante sobre o tratamento de strings realizado pela linguagem Crystal é: as strings podem ser vistas como "arrays", na qual cada posição representa uma posição da string! Veja só um exemplo:
text = "crystal4noobs"
puts text[0] # Irá me retornar o cacactere da primeira posição, neste caso 'c'!
puts text[4] # Irá me retornar o cacarcete da quinta posição, neste caso 't'!
puts text[0, 4] # Mostra os 4 primeiros caracteres!
puts text[0..4] # Mostra os 5 primeiros cacacteres!
Para visualizar se uma string contém algum subconjunto de caracteres podemos utilizar a função "includes?"! Olhe este exemplo:
text = "crystal4noobs"
text.includes?("crystal") # true
Para verificar se uma string inicia com determinado conjunto de caracteres basta utilizar a função "starts_with?", e se finaliza com algum conjunto de caracteres a função "ends_with?" olhe:
text = "crystal4noobs"
puts text.starts_with?("crystal") # true
puts text.starts_with?("lanjoni") # false
puts text.ends_with?("noobs") # true
puts text.ends_with?("follow") # false
Em algum momento, pode ser que você deseje trabalhar com manipulação de strings, e por isso, vamos observar algumas formas de se realizar esta manipulação.
Caso você deseje alterar alguma parte de uma string:
text = "Crystal é muito top"
new_text = text.sub("top", "legal") # Aqui estamos alterando a palavra "top" para "legal" e armazenando em uma nova variável, que será impressa abaixo!
puts text
puts new_text
puts text.upcase # Aqui estamos deixando todas as letras desta string maiúsculas!
Para verificar se alguma string está vazia ou em branco podemos utilizar:
vazio = ""
puts vazio.size # 0
puts vazio.empty? # true
puts vazio.blank? # true
espacosembranco = " \t\n\n\t"
puts espacosembranco.size # 6
puts espacosembranco.empty? # false
puts espacosembranco.blank? # true
É muito interessante perceber como no exemplo acima uma varável não é nula por ter espaços em branco inseridos, e sim quando não possui nenhum valor atribuído, e neste caso, espaços em branco são valores que a caracterizam como não sendo nula!
Certo, mas é possível converter strings para valores "int" ou "float" facilmente? A resposta é sim! Observe:
number = "42.3"
puts number.to_f # Irá retornar 42.3, porém, como "float"!
number = "42"
puts number.to_i # Irá retornar 42, porém, como "integer"!
Algo interessante e extremamente útil para se realizar com strings é "quebrá-las", e isto é possível com as funções de "split" que a linguagem Crystal disponibiliza, como por exemplo:
text = "Esta é uma string!"
puts text
pieces = text.split(" ")
puts pieces # ["Esta", "é", "uma", "string"]
pieces = text.split(/ +/)
puts pieces # ["Esta", "é", "uma", "string"]
text = "nome:segredo"
nome, senha = text.split(":")
puts nome
puts senha
Sim, você pode concatenar um valor de variável em uma nova string para que depois ela possa ser usada, veja alguns exemplos:
name = "Crystal"
number = 4444
text = "O nome é %s" % name
puts text # O nome é Crystal
text = "O nome é %s e o número é %s" % {name, number} # Tuple
puts text # O nome é Crystal e o número é 4444
text = "O nome é %s e o número é %s" % [name, number] # Array
puts text # O nome é Crystal e o número é 4444
text = "O nome é %{txt} e o número é %{num}" % {txt: name, num: number} # NamedTuple
puts text # O nome é Crystal e o número é 4444
text = sprintf "O nome é %s e o número é %s", name, number
puts text # O nome é Crystal e o número é 4444
O que achou desse módulo de strings? Agora vamos falar um pouco sobre loops!