Interpolação
Strings com $ que embutem expressões, e como formatar saída legível.
Formato#
Depois de : vem o formato — a mesma mini-linguagem do format, para não haver uma notação a mais para consultar:
dataforge
x := 3.14159
out $"{x:.2f}" // 3.14
out $"[{"ab":<10}]" // [ab ]
out $"[{42:>8}]" // [ 42]
out $"{1234567:,}" // 1,234,567
out $"{0.5:.1%}" // 50.0%A forma#
dataforge
nome := "Ana"
idade := 30
out $"Ola {nome}, voce tem {idade} anos"O prefixo $ liga a interpolação. Sem ele, {nome} sai literalmente.
| Linguagem | Equivalente |
|---|---|
| Python | f"Ola, {nome}" |
| JavaScript | ` Ola, ${nome} ` |
| C# | $"Ola, {nome}" |
| Kotlin | "Ola, $nome" |
Por que o $ é obrigatório#
dataforge
out "{nome}" # sai literalmente: {nome}
out $"{nome}" # sai: AnaIsso preserva código existente e permite escrever JSON, regex e templates de outros sistemas sem escapar nada.
O que cabe dentro#
Qualquer expressão:
dataforge
out $"{idade + 1}" # aritmética
out $"{moeda(saldo)}" # chamada de ação
out $"{usuario["tags"][0]}" # índices e chaves
out $"{"par" given n % 2 is 0 otherwise "impar"}" # ternário
out $"{[x * 2 cycle x in nums]}" # compreensãoInclusive strings com aspas duplas dentro — o lexer acompanha o aninhamento.
Formatação segue a linguagem#
dataforge
out $"{yes} {no} {void}" # "yes no void", não "True False None"Os valores usam as mesmas regras de out: um record com toString usa o seu toString, uma lista sai como [1, 2, 3].
Chaves literais#
dataforge
out $"{{isso e literal}} e {nome} e interpolado"
# {isso e literal} e Ana e interpoladoMultilinha#
dataforge
out $"""
Relatorio de {mes}
{"-".repeat(30)}
Total: {total}
"""Alinhar colunas#
pad_end para texto, pad_start para número:
dataforge
cycle p in produtos:
out $"{p.nome.pad_end(12)}{str(p.qtd).pad_start(5)}{str(p.preco).pad_start(10)}"saída
Mouse 15 80.0
Teclado 3 200.0Comparando com concatenação#
dataforge
antigo := "Ola, " + nome + "! Voce tem " + str(idade) + " anos."
novo := $"Ola, {nome}! Voce tem {idade} anos."A segunda tem menos ruído, menos + e nenhum str(). As duas produzem exatamente o mesmo texto.