Linguagem de Programação Crystal

String

Uma String representa uma sequência imutável de caracteres UTF-8.

Uma String geralmente é criada com um literal de string, envolvendo-se caracteres UTF-8 em aspas duplas:

"olá mundo"

Uma contrabarra pode ser utilizada para denotar alguns caracteres dentro de uma string:

"\"" # aspas duplas
"\\" # contrabarra
"\e" # escape
"\f" # form feed
"\n" # nova linha
"\r" # carriage return
"\t" # tabulação
"\v" # tabulação vertical

Você pode usar uma contrabarra seguida por até três dígitos para denotar um ponto de código escrito em octal:

"\101" # == "A"
"\123" # == "S"
"\12"  # == "\n"
"\1"   # string com um caractere com o código de ponto 1

Você pode usar uma contrabarra seguida por um u e quatro caracteres hexadecimais para denotar um ponto de código unicode:

"\u0041" # == "A"

Ou você pode usar chaves e especiifcar até seis números hexadecimais (de 0 a 10FFFF):

"\u{41}"    # == "A"
"\u{1F52E}" # == "🔮"

Uma string pode envolver múltiplas linhas:

"hello
      world" # é o mesmo que "hello\n      world"

Perceba que no exemplo acima os espaços antes e depois das linhas, bem como as quebras de linha, aparecem na string resultante. Para evitar isso, você pode dividir uma string em múltiplas linhas juntando múltiplos literais com uma contrabarra:

"hello " \
"world, " \
"no newlines" # é o mesmo que "hello world, no newlines"

Alternativamente, uma contrabarra seguida por uma nova linha pode ser inserida dentro do literal de string:

"hello \
     world, \
     no newlines" # é o mesmo que "hello world, no newlines"

Neste caso, o espaço em branco no começo e no final não é incluso na string resultante.

Se você precisar escrever uma string que tem muitas aspas duplas, parênteses ou caracteres similares, você pode usar literais alternativos:

# Suporta aspas duplas e parênteses aninhados
%(hello ("world")) # same as "hello (\"world\")"

# Suporta aspas duplas e colchetes aninhados
%[hello ["world"]] # same as "hello [\"world\"]"

# Suporta aspas duplas e chaves aninhadas
%{hello {"world"}} # same as "hello {\"world\"}"

# Suporta aspas duplas e sinais de maior que e menor que
%<hello <"world">> # same as "hello <\"world\">"

Heredoc

Você também pode usar um "heredoc" para criar uma string:

<<-XML
<parent>
  <child />
</parent>
XML

Um "heredoc" é escrito com <<-IDENT, onde IDENT é um identificador, uma sequência de letras e números que precisa começar com uma letra. O "heredoc" termina na linha que começa com IDENT, ignorando espaços em branco antes da palavra.

Os espaços em branco no começo da linha são removidos do conteúdo do heredoc de acordo com o número de espaços que este último IDENT tem. Por exemplo:

# O mesmo que "Hello\n  world"
<<-STRING
  Hello
    world
  STRING

# O mesmo que "  Hello\n    world"
<<-STRING
    Hello
      world
  STRING

Interpolação

Para cirar uma String com expressões embutidas, você pode usar a interpolação de strings:

a = 1
b = 2
"soma = #{a + b}"        # "soma = 3"

Isso chama Object#to_s(IO) em cada expressão envolvida por #{...}.