Язык программирования Crystal

String

String представляет неизменяемую последовательность символов в кодировке UTF-8.

String обычно создается с помощью строкового литерала, заключая UTF-8 символы в двойные кавычки:

"hello world"

Обратный слеш может быть использован для обозначения специальных символов:

"\"" # двойная кавычка
"\\" # обратный слеш
"\e" # управляющая последовательность
"\f" # смена страницы
"\n" # новая строка
"\r" # возврат каретки
"\t" # табуляция
"\v" # вертикальная табуляция

Вы можете использовать обратный слеш и до трех цифр после него для обозначения символов в восьмеричной системе счисления:

"\101" # == "A"
"\123" # == "S"
"\12"  # == "\n"
"\1"   # code point 1

Вы можете использовать обратный слеш, u и четыре шестнадцатеричных символа для обозначения Unicode-последовательности:

"\u0041" # == "A"

Или вы можете использовать фигурные скобки и шесть шестнадцатеричных символов (от 0 до 10FFFF):

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

Строка может занимать несколько строк кода:

"hello
      world" # то же, что и "hello\n      world"

Обратите внимание, что в последнем примере в результирующей строке содержатся пробелы и переводы строк. Чтобы избежать этого, разбейте исходную строку на несколько строк, объединяя их обратным слешем:

"hello " \
"world, " \
"no newlines" # то же, что и "hello world, no newlines"

Или вы можете вставлять обратныый слеш в качестве перевода строки во внутрь строкового литерала:

"hello \
     world, \
     no newlines" # то же, что и "hello world, no newlines"

В этом случае, пробелы в начале строки не попадут в результирующую строку.

Если вам нужно написать строку, имеющую много двойных кавычек, скобок и тому подобных символов, то вы можете использовать альтернативные литералы:

# Поддерживает двойные кавычки и вложенные круглые скобки
%(hello ("world")) # то же, что и "hello (\"world\")"

# Поддерживает двойные кавычки и вложенные квадратные скобки
%[hello ["world"]] # то же, что и "hello [\"world\"]"

# Поддерживает двойные кавычки и вложенные фигурные скобки
%{hello {"world"}} # то же, что и "hello {\"world\"}"

# Поддерживает двойные кавычки и вложенные треугольные скобки
%<hello <"world">> # то же, что и "hello <\"world\">"

Heredoc

Вы можете использовать специальный "heredoc" синтаксис для создания строки:

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

"Heredoc" начинается с <<-IDENT, где IDENT - это идентификатор, последовательность букв и цифр, которая должна начинаться с буквы. "heredoc" заканчивается в строке, которая начинается с IDENT, игнорируя пробелы в начале этой строки.

Пробелы в начале строки удаляются из контента "heredoc" в соответствии с количеством пробельных символов, которые имеет последний IDENT. Например:

# то же, что и "Hello\n  world"
<<-STRING
  Hello
    world
  STRING

# то же, что и "  Hello\n    world"
<<-STRING
    Hello
      world
  STRING

Интерполяция

Для создания строки со встроенными выражениями, вы можете использовать интерполяцию:

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

Вызывается метод Object#to_s(IO) на каждом выражении внутри #{...}.