A magia das strings: por que a formatação em Kotlin é uma arte
\n\nImagine: você está escrevendo um aplicativo para rastrear treinos esportivos. Precisa exibir uma mensagem: "Olá, Alexei! Seu tempo: 42,5 km em 2:15:07. Melhor resultado 3,2% melhor.". Se você montar essa string com concatenação (junção) no estilo Java — o código vira uma bagunça de sinais de mais e aspas. A formatação de strings em Kotlin resolve esse problema de forma elegante e poderosa.
\n\nNeste artigo, vamos explorar 5 abordagens para Kotlin String formatting. Você aprenderá quando usar interpolação, quando usar o bom e velho String.format() e quando usar templates avançados. Vamos lá!
1. Interpolação de strings: o pão com manteiga do Kotlin
\n\nA técnica mais popular e simples é a interpolação de strings em Kotlin. Ela está embutida diretamente na linguagem: use o cifrão $ para inserir uma variável e ${} para expressões.
val name = "Ana"\nval age = 28\nval message = "Meu nome é $name, tenho $age anos."\nprintln(message) // Meu nome é Ana, tenho 28 anos.\n\n// Expressões com chaves\nval price = 49.99\nval discount = 0.2\nval finalPrice = "Preço com desconto: ${price * (1 - discount)} reais."\nprintln(finalPrice) // Preço com desconto: 39.992 reais.\n\nPrós: legibilidade, velocidade, sem chamadas extras. Contras: sem controle de formato de números (por exemplo, número de casas decimais).
\n\nQuando usar
\n- \n
- Mensagens simples, logs, textos de UI \n
- Quando não é necessário ajuste preciso de formato de números ou datas \n
- Dentro de
println()ouStringBuilder\n
2. String.format(): o legado do Java no Kotlin
\n\nSe você precisa de controle de formato — o String.format() em Kotlin vem ao resgate. Esta é uma ponte direta para o método Java String.format() com os mesmos especificadores (%s, %d, %.2f).
val pi = 3.1415926535\nval formatted = String.format("Número π com três casas: %.3f", pi)\nprintln(formatted) // Número π com três casas: 3.142\n\n// Vários argumentos\nval name = "João"\nval score = 95\nval result = String.format("%s marcou %d pontos de 100", name, score)\nprintln(result) // João marcou 95 pontos de 100\n\nUma nuance importante: a formatação de strings Kotlin String.format não é type-safe — se você passar o tipo errado, receberá uma exceção em tempo de execução. Para verificação estática, use métodos específicos do Kotlin (veja a seção 5).
\n\n3. MessageFormat: quando você precisa de templates com placeholders
\n\nPara templates complexos com argumentos repetidos ou localização — MessageFormat em Kotlin. Ele consegue escolher a forma da palavra (singular/plural) e formatar datas.
\n\nimport java.text.MessageFormat\n\nval pattern = "{0} tem {1} {0,choice,0#maçãs|1#maçã|2#maçãs}."\nval result = MessageFormat.format(pattern, "Pedro", 5)\nprintln(result) // Pedro tem 5 maçãs.\n\n// Com data\nval datePattern = "Hoje é {0,date,long}. Hora: {0,time,short}"\nval now = java.util.Date()\nprintln(MessageFormat.format(datePattern, now))\n\nQuando escolher: internacionalização (i18n), declinações complexas, templates com 5+ argumentos. Contra: sintaxe verbosa e dependência de java.text.
4. Extensões Kotlin: concisão e type-safety
\n\nA comunidade Kotlin adora extensões para formatação de strings. Você pode criar sua própria solução ou usar bibliotecas prontas (por exemplo, kotlinx.string).
// Extensão simples\nfun String.format(vararg args: Any?): String {\n return String.format(this, *args)\n}\n\n// Uso\nval template = "Olá, %s! Seu saldo: %.2f USD"\nval msg = template.format("Máximo", 1234.5678)\nprintln(msg) // Ol