Ultimamente, tenho visto o Clojure e me deparei com esta postagem no Stackoverflow que indica alguns projetos seguindo as práticas recomendadas e o bom código geral do Clojure. Eu queria entender o idioma depois de ler alguns tutoriais básicos, então dei uma olhada em alguns projetos do "mundo real".
Depois de analisar o ClojureScript e o Compojure (dois dos "bons" projetos acima mencionados), sinto que Clojure é uma piada. Eu não entendo por que alguém escolheria o Clojure, digamos, Ruby ou Python, duas linguagens que eu amo e que possuem uma sintaxe tão limpa e são muito fáceis de entender, enquanto o Clojure usa tantos parênteses e símbolos em todos os lugares que arruina a legibilidade de mim.
Eu acho que Ruby e Python são lindos, legíveis e elegantes. Eles são fáceis de ler, mesmo para quem não conhece o idioma de dentro para fora. No entanto, Clojure é opaco para mim e sinto que devo conhecer todos os pequenos detalhes sobre a implementação da linguagem para poder entender qualquer código.
Então, por favor, me esclareça!
- O que há de tão bom no Clojure?
- Qual é o mínimo absoluto que devo saber sobre o idioma para apreciá-lo?
I don't understand why someone would pick Clojure over say, Ruby or Python
- roda na jvm e pode usar a biblioteca java inteira.... have such a clean syntax
indiscutivelmente, linguagens funcionais como o lisp têm uma sintaxe e estrutura muito limpas, é apenas uma para a qual a maioria das pessoas não está acostumada.few
símbolos fora dos parênteses em comparação com muitos idiomas e quase nenhuma palavra reservada. A razão pela qual você acha ilegível é porque é um paradigma totalmente novo e funciona de uma maneira fundamentalmente diferente de uma linguagem típica orientada a objetos. Dê algum tempo e energia.Respostas:
Para o fundo que você forneceu, se é que posso parafrasear:
... Acho que a melhor resposta é ler o livro Clojure Programming de Emerick, Carper e Grand. O livro tem numerosas comparações explícitas de código com Python, Ruby e Java e possui explicações em texto abordando os codificadores dessas linguagens. Pessoalmente, vim para Clojure depois de criar projetos de bom tamanho com Python e ter alguma experiência em Lisp; a leitura desse livro me ajudou a começar a usar o Clojure não apenas em projetos paralelos, mas para fins profissionais.
Para abordar suas duas perguntas diretamente:
Sugestões adicionais: a elegância e o poder do Lisp são parcialmente da sua sintaxe minimalista e totalmente consistente. É muito mais fácil apreciar isso com um bom editor, por exemplo, Emacs com modo clojure e ParEdit. À medida que você se familiariza com isso, a sintaxe diminui e você "vê" semântica, intenções e abstrações concisas. Em segundo lugar, não comece lendo a fonte do ClojureScript ou do Compojure, elas são muito de uma vez; tente alguns problemas do 4clojure.org e compare as soluções com os principais codificadores de lá. Se você encontrar 4-6 outras soluções, invariavelmente alguém terá escrito uma solução no estilo FP verdadeiramente idiomática e sucinta, que você pode comparar com uma solução no estilo imperativa desajeitada, detalhada e desnecessariamente complicada.
fonte
Os dialetos Lisp têm um nicho único devido à sua sintaxe simples. Essa sintaxe simples torna a metaprogramação através do uso de macros muito simples. Isso permite que você modele o idioma para se adequar ao domínio do seu problema, em vez de modelá-lo para ajustá-lo ao seu idioma. É muito legal assim que você começa a entender, e permite que você faça muitas coisas facilmente, o que é muito difícil em outros idiomas.
A desvantagem é que, como todo programa Lisp define essencialmente sua própria linguagem, você realmente precisa de uma compreensão sólida das coisas para entender o que está acontecendo.
Agora, para responder suas perguntas ...
Clojure é um dialeto Lisp moderno que é executado na JVM / CLR. Isso facilita tirar proveito do poder do Lisp em uma infraestrutura existente.
É essencial entender como usar macros para criar o Lisp no domínio do problema para apreciar seu uso. Eu realmente só entendi isso depois de implementar um tempo de execução do Lisp, quando descobri que muitos dos principais recursos da linguagem podem ser facilmente implementados no próprio Lisp. É preciso um projeto de tamanho justo para conseguir isso.
Suas vantagens à parte, embora seja divertido programar, eu pessoalmente não tenho muitos casos em que me voltaria para problemas diários. É uma ferramenta muito boa para aprender a expandir a mente e, depois de aprender o Lisp corretamente, tornou-se muito mais natural tirar proveito das instalações de meta programação em outras linguagens.
A sintaxe simples facilita a interpretação dos computadores (permitindo macros poderosas e fáceis), mas torna muito difícil para um ser humano analisar expressões complexas rapidamente.
fonte
Os pontos fortes do Clojure foram destacados muitas vezes e, com certeza, contribuem para uma linguagem muito poderosa, para que eu não os repita novamente aqui.
Eu sempre amei o lisp, desde os dias de uni e fiquei realmente empolgado quando descobri o Clojure (talvez a chance de usar o lisp fora da academia, finalmente!). No entanto, quando comecei a aprender, um sentimento desconfortável começou a surgir, embora não consiga identificar exatamente o que não gosto. Antes de tudo, eu diria que a codificação no Common lisp foi fácil e divertida para mim, mas Clojure tem uma curva de aprendizado mais acentuada. Clisp tinha uma certa beleza e elegância. Não tenho certeza se vou sentir o mesmo de Clojure. Estou pensando se esse sentimento desaparecerá à medida que eu tiver mais experiência.
Tenho outro palpite para minha misteriosa repulsa. Eu acho que pode ser sua grande flexibilidade. Por exemplo, você pode ter estruturas que são meio vetor e meio mapa e com alguns caracteres de código, você pode aceitá-las como parâmetros, desmontá-las e processá-las corretamente. Sim, ele remove todo o padrão, mas de alguma forma não parece certo. É como se você nunca soubesse muito bem que as regras sob todos esses parênteses, dois pontos, braquetes, etc. estão operando.
Para mim, eu ainda amo a linguagem por todas as suas vantagens (principalmente, rodando na JVM e simplificando a simultaneidade, sendo muito mais poderosa e concisa do que Java e com falhas de design menos óbvias), mas o júri ainda está em dúvida se algo poderia ter sido melhorado.
fonte