Melhores formas de converter valores para strings em JavaScript
Nada de AI por hoje: vamos para o básico com JS hard code. Mais: tool para compactar repos e inputá-los em IAs, assistente para lembrar comandos do terminal e Doom programado em SQL (what?!).
JavaScript é uma linguagem com muitas nuances, e uma das mais básicas envolve a conversão de valores para strings. Embora pareça uma operação simples, cada método tem suas limitações e armadilhas que podem causar bugs inesperados em seu código.
Dr. Axel Rauschmayer, especialista em JavaScript, publicou recentemente um artigo detalhado em seu blog que explora esse tema. Ele identifica cinco abordagens comuns para converter valores para strings:
String(v)
'' + v
`${v}`
v.toString()
{}.toString.call(v)
O problema é que nenhuma dessas abordagens, exceto a última, funciona para todos os tipos de valores. Por exemplo, ao tentar converter um Symbol()
para string usando concatenação ('' + v
) ou template literals (`${v}`
), você receberá um erro. Da mesma forma, objetos com protótipo nulo ({__proto__: null}
) causam problemas em quase todos os métodos.
Isso pode gerar bugs sutis, como no exemplo que Rauschmayer apresenta:
class UnexpectedValueError extends Error {
constructor(value) {
super('Unexpected value: ' + value); // Problema aqui!
}
}
Este código gera uma exceção quando recebe certos valores, como Symbol()
ou {__proto__: null
}.
Entre todas as abordagens, {}.toString.call(v)
(equivalente a Object.prototype.toString.call(v)
) é a única que funciona universalmente com todos os valores, incluindo os problemáticos. Se não precisar de 100% de segurança, String(v)
também é uma boa opção, mais concisa e que falha apenas com objetos sem protótipo.
Para objetos, a conversão padrão para string geralmente não é muito útil ("[object Object]"
). O método JSON.stringify()
oferece uma alternativa melhor, especialmente para objetos e arrays, mostrando sua estrutura interna. No entanto, ele tem suas próprias limitações, como não suportar undefined
, Symbol()
, funções ou BigInts.
A lição aqui é clara: sempre escolha o método de conversão para string com base nos tipos de valores que você espera manipular. Se precisar de uma solução universal, {}.toString.call(v)
é sua melhor aposta.
Para debugging, os métodos do console como console.log()
e console.dir()
geralmente produzem saídas úteis com poucas limitações, tornando-os ideais para visualizar dados durante o desenvolvimento.
Desenvolvedores JavaScript experientes sabem que dominar esses detalhes aparentemente triviais é o que diferencia código robusto de código frágil. Para se aprofundar, vale ler o artigo completo. Esta, esta e esta documentação da Mozilla ajudam a complementar o assunto.
Repomix: empacote código para análise com IA
Repomix é uma ferramenta de código aberto que compacta repositórios inteiros em um único arquivo otimizado para LLMs. Ela permite que desenvolvedores enviem bases de código completas para ferramentas como Claude, ChatGPT, Gemini etc. Disponível como CLI, site (repomix.com) ou lib JavaScript, oferece recursos como contagem de tokens, compressão inteligente de código e detecção de informações sensíveis. O formato XML padrão utiliza tags que melhoram a compreensão por modelos de IA, facilitando revisões de código, refatorações e geração de documentação com contexto completo do projeto. Mais no site e no repo.
Zev: assistente para lembrar comandos de terminal via linguagem natural
Zev é uma ferramenta de linha de comando que facilita a vida ao transformar pedidos em linguagem natural em comandos de terminal. Disponível via pip, o projeto permite que usuários descrevam o que desejam fazer e recebam sugestões de comandos prontos para uso. A ferramenta funciona com OpenAI API ou localmente com Ollama, oferecendo flexibilidade para diferentes necessidades. Lançado sob licença MIT, Zev inclui alertas para comandos potencialmente perigosos. Para experimentar, basta instalar via pip e executar em modo interativo algo como "mostrar todos os processos Python em execução". Mais no repo oficial.
Um milhão de euros em receita anual recorrente com um único dev. Como?
Por 14 anos, Bram Jetten foi o único programador no PlanGo, empresa holandesa que desenvolve um sistema para autoescolas, e que alcançou €1 milhão em receita anual recorrente em 2022. O segredo para o feito, segundo ele, foi — quem diria — Ruby on Rails. "Para fundadores técnicos, Rails não é apenas mais um framework; é uma forma de fazer o trabalho de uma equipe inteira sozinho. É um superpoder", afirma. Os aplicativos da empresa somam mais de 100 mil downloads anuais. Hoje, o PlanGo conta com investimento externo e um segundo desenvolvedor, mas mantém a abordagem enxuta — e bota enxuta nisso. Mais no site do cara.
Quanta Magazine explora impacto da IA na ciência e matemática
A Quanta Magazine, uma das melhores revistas científicas da atualidade, lançou uma série sobre como a IA está transformando a ciência e a matemática. A publicação examina desde as origens da IA na física e biologia até como ela revoluciona a forma como pesquisadores conduzem experimentos e matemáticos abordam provas. Os artigos exploram a complexidade das redes neurais, os desafios de interpretabilidade dos modelos de linguagem e o futuro da relação entre IA e cientistas. Vale conferir a análise sobre como a tecnologia está redefinindo o que significa fazer ciência. Mais na série “Science, Promisse and Peril in the Age of AI”.
Programador cria "Doom" com SQL em DuckDB-WASM
Um dev conseguiu criar um clone primitivo do Doom usando SQL — isso mesmo — como principal mecanismo de renderização e lógica de jogo. Em vez de usar JavaScript para gerenciar o estado do jogo e Canvas/WebGL para desenhar os gráficos, ele utilizou DuckDB-WASM, um banco de dados analítico que roda no navegador. O mapa do jogo, as coordenadas do jogador, posições de inimigos e balas são armazenados em tabelas SQL, enquanto consultas recursivas realizam o algoritmo de raycasting para renderizar a visão 3D. O experimento alcançou 6-7 FPS. Mais sobre o experimento inusitado aqui.
Obrigado por acompanhar a BeTalent Academy. Se gostou, compartilhe e deixe um comentário. Até a próxima semana, com mais uma edição!