"Açúcar Ruby inútil": encaminhamento de argumentos

A nova sintaxe de encaminhamento de argumentos do Ruby usando `...` divide os desenvolvedores entre os que a veem como um açúcar sintático elegante e de baixa manutenção para encapsular e delegar métodos, e os que a consideram uma complexidade desnecessária que prejudica a legibilidade. A discussão se amplia para uma crítica ao design geral do Ruby — suas muitas convenções de chamada, blocos e sintaxe em evolução — em contraste com linguagens como JavaScript, Python, Go e Clojure, e se liga a questões mais profundas sobre simplicidade, “mágica” e quanto de sintaxe uma linguagem madura deve continuar adicionando. Vários comentaristas também mencionam tipagem estática opcional e sistemas de tipos (por exemplo, Sorbet, TypeScript) como uma alternativa para melhorar a robustez em vez de novos recursos sintáticos.

Recepção geral do artigo e da funcionalidade

  • Muitos comentaristas gostam da série e veem a sintaxe de encaminhamento de argumentos ... como elegante, expressiva e útil para o Ruby do mundo real (por exemplo, objetos de serviço em Rails).
  • Outros acham o novo açúcar sintático feio, confuso ou “inútil”, especialmente quando vêm de versões mais antigas do Ruby ou preferem uma sintaxe mínima e explícita.

Reticências ... vs convenção de “código omitido”

  • Várias pessoas observam a confusão porque ... é tanto sintaxe válida de Ruby quanto uma convenção comum para “código omitido”.
  • Diversas alternativas são sugeridas:
    • Usar . . . com espaços, comentários ou marcadores textuais como [..trim..].
    • Confiar em recursos de linguagem como todo! do Rust ou ... do Python como marcador de posição.
  • Várias linguagens são citadas como já usando ... para variádicos/spread, então alguns argumentam que o Ruby não está quebrando nenhum “padrão da indústria”.

Modelo de argumentos e blocos do Ruby

  • Explicações esclarecem que o Ruby tem:
    • Argumentos posicionais e nomeados, além de um bloco opcional.
    • Particularidades históricas em torno de hashes vs. keywords, corrigidas no Ruby 3.
  • Blocos vs. procs vs. lambdas são discutidos:
    • Blocos são fechamentos implícitos com semântica especial de retorno.
    • Procs/lambdas são objetos chamáveis explícitos, com comportamento diferente de fluxo de controle.
    • Alguns veem três abstrações “parecidas com funções” como excessivamente complicadas; outros as consideram poderosas e intuitivas depois de aprendidas.

Qualidade de design: Ruby vs. outras linguagens

  • Um lado argumenta que as múltiplas convenções de chamada e açúcares do Ruby indicam um design falho ou inchado em comparação com modelos mais simples (por exemplo, “apenas passar objetos e funções”, como em JavaScript).
  • A visão oposta:
    • A sintaxe e a semântica do Ruby são vistas como cuidadosamente pensadas e altamente legíveis.
    • Muitas linguagens da mesma época fizeram escolhas estranhas; o Ruby não é unicamente ruim.
    • O Ruby oferece um teto alto para código elegante no estilo DSL, mas também um piso muito baixo para “mágica” ilegível.

Tipagem estática e sistemas grandes

  • Alguns argumentam que o Ruby deveria priorizar tipagem estática opcional; outros afirmam que dois sistemas de tipos dentro de uma mesma linguagem são má engenharia.
  • TypeScript e anotações de tipo em Python são citados como bem-sucedidos; Sorbet e outras ferramentas de tipagem do Ruby são vistas como úteis, mas menos poderosas.
  • Há forte discordância sobre se a tipagem estática é essencial para sistemas grandes e de longa duração ou uma prática supervalorizada e de feedback lento.