"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.
- Usar
- 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.