10 · Strings
Literais e Escapes
Aspas duplas, sequências de escape (\n \t \" \\) e o tipo char.
Nesta página
Toda string em Zolo usa aspas duplas. Não existe sintaxe de aspas simples
para strings — 'a' é um literal de caractere (tipo char), útil em
comparações mas diferente de str.
As sequências de escape básicas são \n (nova linha), \t (tabulação),
\" (aspas dentro da string) e \\ (barra invertida literal):
Literais, escapes e o método .len() em strings simples.
// Feature: Strings — literals and escape sequences
// Syntax: `"..."`, `"""..."""`, and raw `r"..."` strings
// When to use: represent text. Single quotes are CHAR literals.
// Strings always use double quotes.
let greeting = "Hello, world!"
print(greeting)
// expected: Hello, world!
// Basic escape sequences.
print("line 1\nline 2") // \n line break
print("col1\tcol2\tcol3") // \t tab
print("quote: \"") // \" literal quote inside string
print("slash: \\") // \\ literal backslash
print("return: end\rstart") // \r carriage return
// Single quotes are CHAR literals (1 character only).
// Useful for character comparisons, not strings.
let c = 'a'
print(c == 'a')
// expected: true
// Cooked strings and character literals accept Unicode scalar escapes.
print("Açaí - café")
print("emoji: \u{1F680}")
print('\u{03BB}')
// Empty strings and single-char strings.
let empty = ""
let s = "x"
print(empty.len()) // 0
print(s.len()) // 1
Desafio
Crie uma string com uma barra invertida seguida de um n literal (ou seja, os
dois caracteres \ e n, não uma quebra de linha). Imprima-a e confirme que
o resultado exibe \n e não uma linha em branco.
Valores exatos de bytes
b"\xAB" guarda um byte com valor 171. Cada escape hexadecimal exige exatamente dois dígitos. O texto sem escapes fornece bytes UTF-8, enquanto os escapes conservam zero e bytes inválidos em UTF-8. Literais de bytes não interpolam expressões. .len() conta os bytes; .bytes() devolve uma cópia como valores inteiros, indexados a partir de zero como os demais arrays.
// The KTX 2 signature contains bytes that are not valid UTF-8.
let signature = b"\xABKTX 20\xBB\r\n\x1A\n"
print(signature.len())
print(signature.bytes()[0])
print(signature.bytes()[7])
Literais de bytes funcionam na VM e nos backends native e LLVM, incluindo a VM do navegador. O wasm-aot independente ainda os rejeita na compilação porque não tem uma representação para bytes opacos.
Veja também