4 pontos por GN⁺ 2025-08-20 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Programar da esquerda para a direita significa que, assim que o código é digitado, o programa permanece em um estado válido, maximizando o suporte das ferramentas, como o autocompletar do editor
  • As list comprehensions do Python atrapalham o autocompletar por causa de variáveis não declaradas e da ausência de inferência de tipos
  • Rust e JavaScript permitem compor o programa naturalmente da esquerda para a direita, tornando mais intuitivos o uso de variáveis e a descoberta de métodos
  • O estilo funcional em C e Python prejudica uma experiência de codificação eficiente por causa da baixa descobribilidade dos nomes de funções ou da estrutura
  • Em lógicas mais complexas, o código desenvolvido da esquerda para a direita é mais fácil de ler e oferece melhor manutenção e extensibilidade

Programar da esquerda para a direita

O código precisa ser válido no momento em que é digitado


Limitações das list comprehensions em Python

  • A sintaxe de list comprehension do Python words_on_lines = [line.split() for line in text.splitlines()] exige acessar uma variável não declarada (line), o que faz com que o editor não consiga oferecer autocompletar nem inferência de tipos de forma adequada
  • Durante o processo de digitação parcial do código
    • ao digitar algo como words_on_lines = [line.sp, o editor não sabe o tipo de line e não consegue sugerir métodos
    • também fica mais difícil detectar erros em potencial, como um typo no nome da variável (lime, por exemplo)
  • Para receber sugestões corretas, é preciso escrever código incompleto, o que torna o processo pouco intuitivo e incômodo

Composição da esquerda para a direita em Rust

  • No exemplo em Rust (let words_on_lines = text.lines().map(|line| line.split_whitespace());),
    • no momento em que a variável (line) aparece pela primeira vez junto com a declaração da função anônima, ela já é tratada como declarada, permitindo autocompletar e sugestão de métodos imediatamente
    • na prática, até o método split_whitespace pôde ser encontrado facilmente graças às sugestões automáticas
  • Como o programa permanece sempre em um estado parcialmente válido, a IDE ou o editor consegue oferecer suporte à codificação em tempo real

Divulgação progressiva (Progressive Disclosure) e usabilidade de APIs

  • Divulgação progressiva (Progressive Disclosure) é um princípio de design em que o usuário só encontra a complexidade na medida em que precisa dela, e isso também pode ser aplicado à programação
    • Ex.: semelhante à UX de um processador de texto em que opções relacionadas só aparecem ao adicionar uma imagem
  • A linguagem C oferece pouco desse suporte
    • como nem todas as funções relacionadas a FILE *file podem ser exploradas via file., é preciso decorar padrões de nomes de função (fread, fclose etc.), e fica difícil descobrir funcionalidades
    • já em uma linguagem ideal, as sugestões de métodos via file. permitiriam descobrir progressivamente os recursos relacionados com facilidade

Diferença na descobribilidade de funções e métodos

  • Comparação entre os exemplos map(len, text.split()) em Python e text.split(" ").map(word => word.length) em JavaScript
    • em Python, como nomes de função como len, length ou size não são previsíveis, é preciso tentar várias opções para descobrir qual realmente funciona
    • em JavaScript, basta digitar .l depois de word. para o editor sugerir métodos como length, o que dá alta descobribilidade
    • até funções de ordem superior como map deixam claros de imediato o valor retornado e o tipo de dado

Quanto mais complexa a lógica, maior a vantagem da escrita estruturada

  • Em lógicas mais complexas (código longo em Python com filter e lambda aninhados),
    • é preciso verificar repetidamente o início e o fim do código, e surgem problemas de legibilidade reduzida e dificuldade de compreensão em condições e pareamento de parênteses
  • Na versão equivalente em JavaScript, é possível ler e entender o código sequencialmente, de cima para baixo e da esquerda para a direita

Princípio central

O código precisa ser válido em cada momento da digitação

  • Mesmo ao digitar apenas text, o programa continua em um estado válido
  • Mesmo após escrever text.split(" "), e depois continuar com .map(word => word.length), o estado intermediário do programa permanece sempre válido
  • Esse padrão de codificação aumenta a possibilidade de suporte em tempo real pelo editor e, em um ambiente REPL, também permite verificar os resultados imediatamente

Conclusão

  • O design de APIs e linguagens deve dar suporte para que o código possa ser digitado naturalmente da esquerda para a direita, formando um programa válido em cada etapa intermediária
  • Um bom design de API é a chave para melhorar essa experiência de codificação

Ainda não há comentários.

Ainda não há comentários.