Então, eu estou codificando meus primeiros projetos em C ++ e parece que é preciso mais esforço para tornar o código "limpo", em vez de simplesmente funcionar. Ou seja, parece que o C ++ "permite" escrever código feio, mas funcional.
O que me fez pensar,
Uma linguagem de programação pode impor código limpo por design? Já existem esses idiomas?
Além disso, como isso é incorporado como princípios de design no desenvolvimento / teoria da linguagem de programação? Que tipo de medidas são usadas?
Respostas:
O principal efeito que o design da linguagem tem no "código limpo" é no nível sintático. Idiomas com muitas abreviações e operadores obscuros (Perl / APL) se prestam ao código "sujo", enquanto idiomas com um conjunto menor de elementos (digamos, Python) se prestam a um código mais limpo.
A semântica, no entanto, é um animal muito diferente. Não há como impor que a semântica de uma linguagem seja usada de maneira limpa, principalmente porque você não pode, como compilador, saber o que o usuário da linguagem está tentando realizar. Uma ferramenta poderosa é simplesmente isso - uma ferramenta poderosa, para o bem ou para o mal.
No final do dia, a semântica é mais importante que a sintaxe. Também é a parte mais difícil de descobrir como desenvolvedor de manutenção (por exemplo, "o que esse código realmente significa? Entendo o que ele faz ...").
Conseqüentemente, eu diria que não existe um design para impor código limpo, mas você pode escrever uma sintaxe simples com semântica limpa que facilita isso. Para melhor ou pior, o código limpo é principalmente uma questão de conhecimento, motivação, disciplina e habilidade do desenvolvedor.
fonte
Os idiomas podem forçar ou incentivar os programadores a abordar determinadas classes de bugs, o que faz parte da definição de código limpo. Por exemplo, vários idiomas fazem um trabalho relativamente decente de endereçamento:
Isso apenas leva você a parte do caminho, porque o código limpo se refere principalmente à comunicação entre seres humanos . As linguagens de programação realmente têm apenas uma alavanca para ajudar nisso, e esse é seu poder expressivo . É um termo realmente difícil de definir, mas basicamente é mais fácil para os bons programadores escrever código mais limpo em linguagens mais expressivas. Eles têm mais ferramentas disponíveis para expressar facilmente um algoritmo em termos que se comunicam bem com outros seres humanos. Não me interpretem mal, você pode escrever um código limpo em ( quase ) qualquer linguagem de programação. São apenas alguns idiomas que facilitam e têm um melhor resultado relativo.
No entanto, você não pode simplesmente aumentar a expressividade e magicamente as pessoas começarão a escrever um código melhor. Com a maioria dos programadores, você dá a eles mais botões para ativar o idioma deles, e eles não sabem como usá-los adequadamente; portanto, o código deles acaba realmente pior. É preciso disciplina e boa orientação para melhorar a qualidade do seu código. Não há balas de prata.
fonte
Até certo ponto. Muitas linguagens são deliberadamente projetadas para incentivar algumas formas de código limpo, de acordo com os ideais dos designers de linguagem. Certamente é possível escrever código feio e incompreensível em qualquer idioma, mas alguns idiomas se esforçam mais para desencorajá-lo.
Como exemplo, o Python obriga a recuar blocos de acordo com a estrutura semântica da linguagem, enquanto muitas outras linguagens permitem que você recue totalmente de forma aleatória ou nenhuma. Este é um exemplo de uma linguagem que encoraja ativamente um certo ideal de limpeza.
fonte
Se você puder quantificá-lo, poderá criar um idioma que possa otimizá-lo.
Embora eu não conheça nenhum idioma específico que realmente imponha uma política de "código limpo", os policiais de estilo executados na compilação são bastante comuns.
A principal razão pela qual essa é uma etapa separada da inserção no idioma é em grande parte uma função das prioridades. É no melhor interesse de uma linguagem de programação permitir maior flexibilidade aos programadores para obter o nível mais amplo de adoção. Existem tantas linguagens de programação e DSLs diferentes que restringir artificialmente a base de usuários, sendo exigente e opinativo sobre qual entrada é permitida, provavelmente atrapalha a adoção mais ampla.
Por exemplo, não é do melhor interesse do C # forçar as pessoas a escrever
ao invés de
Mas os damas de estilo podem ser exigentes, porque é para isso que eles foram projetados.
Então, para responder à pergunta
ênfase minha
Absolutamente, desde que você forneça uma definição forte para o que significa "código limpo".
Por exemplo, eu posso definir "código limpo" como:
e você pode discordar de algumas ou de todas essas convenções, mas no final do dia elas são quantificáveis e podem ser aplicadas programaticamente.
fonte
Não, não no sentido que você descreve. A detecção de "feiúra" não pode ser feita automaticamente!
No entanto, os designers de linguagem podem fazer coisas para incentivar um bom código (não quero dizer "limpo" porque às vezes o código bom e seguro também é longo e "feio"). Por exemplo, os projetistas da linguagem Rust examinaram as coisas que os programadores disciplinados em C ++ costumam fazer (como atribuir aos valores alocados na pilha um único "proprietário") e facilitaram a execução de algumas dessas coisas. Isso inclui o fornecimento de um typechecker que você pode usar para verificar se não cometeu certos erros comuns.
Eu diria que um bom design de linguagem geralmente é reativo: os designers analisam o que os bons programadores fazem e tentam tornar isso mais fácil e "mais bonito".
fonte