Je me suis récemment tourné vers Clojure et je suis tombé sur ce billet sur Stackoverflow qui indique que certains projets respectent les meilleures pratiques et le bon code Clojure. Je voulais me familiariser avec la langue après avoir lu quelques tutoriels de base, alors j’ai jeté un coup d’œil à des projets "réels".
Après avoir examiné ClojureScript et Compojure (deux des "bons" projets susmentionnés), je me sens juste comme si Clojure était une blague. Je ne comprends pas pourquoi quelqu'un choisirait Clojure plutôt que Ruby ou Python, deux langages que j'aime beaucoup, dont la syntaxe est aussi claire et claire, et qui sont très faciles à maîtriser, alors que Clojure utilise tellement de parenthèses et de symboles partout qui gâche la lisibilité. moi.
Je pense que Ruby et Python sont beaux, lisibles et élégants. Ils sont faciles à lire, même pour quelqu'un qui ne connaît pas la langue à fond. Cependant, Clojure est opaque pour moi et j’ai le sentiment que je dois connaître tous les détails de l’implémentation du langage pour pouvoir comprendre n’importe quel code.
Alors s'il te plaît, éclaire-moi!
- En quoi Clojure est-il si bon?
- Quel est le minimum absolu que je devrais connaître à propos de la langue pour l'apprécier?
I don't understand why someone would pick Clojure over say, Ruby or Python
- il fonctionne sur le jvm et peut utiliser toute la bibliothèque java.... have such a clean syntax
sans aucun doute, les langages fonctionnels comme lisp ont une syntaxe et une structure très claires, ce qui est tout simplement impossible pour la plupart des gens.few
symboles très en dehors de la parenthèse par rapport à beaucoup de langues, et presque pas de mots réservés. La raison pour laquelle vous le trouvez illisible est qu’il s’agit d’un paradigme totalement nouveau qui fonctionne de manière fondamentalement différente de celle d’une langue typique orientée objet. Donnez-lui du temps et du pouvoir.Réponses:
Pour le contexte que vous avez donné, si je puis me permettre de paraphraser:
... Je pense que la meilleure réponse est de lire le livre Clojure Programming d'Emerick, Carper et Grand. Le livre propose de nombreuses comparaisons de code explicites avec Python, Ruby et Java, ainsi que des explications textuelles adressant les codeurs de ces langues. Personnellement, je suis arrivé à Clojure après avoir construit des projets de bonne taille avec Python et acquis une certaine expérience de Lisp. En lisant ce livre, j'ai été convaincu de commencer à utiliser Clojure non seulement dans des projets parallèles, mais à des fins professionnelles.
Pour répondre directement à vos deux questions:
Suggestions supplémentaires: L'élégance et la puissance de Lisp viennent en partie de sa syntaxe minimaliste et parfaitement cohérente. Il est beaucoup plus facile d'apprécier cela avec un bon éditeur, par exemple Emacs avec le mode clojure et ParEdit. Au fur et à mesure que vous vous familiarisez avec elle, la syntaxe s'estompe et vous «voyez» la sémantique, les intentions et des abstractions concises. Deuxièmement, ne commencez pas par lire le code source de ClojureScript ou Compojure, ceux-ci sont trop nombreux. essayez quelques problèmes de 4clojure.org et comparez les solutions avec les meilleurs codeurs. Si vous voyez 4 à 6 autres solutions, invariablement quelqu'un aura écrit une solution de style FP vraiment idiomatique et succincte que vous pourrez comparer à une solution de style impérial maladroite, verbeuse et inutilement compliquée.
la source
Les dialectes Lisp ont une niche unique en raison de leur syntaxe simple. Cette syntaxe simple rend la méta-programmation grâce à l'utilisation de macros très simple. Cela vous permet de modéliser le langage en fonction de votre domaine de problème au lieu de le modéliser pour l'adapter à votre langage. C'est vraiment cool une fois que vous avez compris, et cela vous permet de faire facilement beaucoup de choses très difficiles dans d'autres langues.
L'inconvénient est que, comme chaque programme Lisp définit essentiellement son propre langage, vous avez vraiment besoin de bien comprendre ce qui se passe.
Maintenant, pour répondre à vos questions ...
Clojure est un dialecte Lisp moderne qui s'exécute dans la JVM / CLR. Cela facilite l'exploitation de la puissance de Lisp dans une infrastructure existante.
Il est essentiel de comprendre comment utiliser les macros pour construire Lisp dans le domaine de votre problème afin d’apprécier son utilisation. Je ne comprenais vraiment cela qu'après avoir implémenté un runtime Lisp, quand j'ai découvert qu'une grande partie des fonctionnalités du langage principal pouvaient facilement être implémentées dans Lisp lui-même. Il faut un projet de taille raisonnable pour l'obtenir.
Mis à part ses avantages, bien qu’il soit amusant de programmer, je n’ai personnellement pas beaucoup de cas où je me tournerais vers elle pour régler des problèmes quotidiens. C'est un très bon outil pour apprendre à développer l'esprit, et après avoir correctement appris Lisp, il est devenu beaucoup plus naturel de tirer parti des installations de méta-programmation dans d'autres langues.
La syntaxe simple facilite l’interprétation pour les ordinateurs (autorisant des macros aussi puissantes et faciles), mais il est très difficile pour un humain d’analyser rapidement des expressions complexes.
la source
Les forces de Clojure ont été soulignées à maintes reprises et constituent un langage très puissant. Je ne les répéterai donc pas ici.
J'ai toujours aimé lisp depuis l'université et j'étais vraiment enthousiasmé lorsque j'ai découvert Clojure (peut-être la chance d'utiliser lisp en dehors du monde universitaire enfin!). Cependant, alors que je commençais à apprendre, un sentiment de malaise a commencé à s’infiltrer, bien que je ne puisse pas déterminer exactement ce que je n’aime pas. Tout d'abord, je dirais que coder dans Common lisp était facile et amusant pour moi, mais Clojure a une courbe d'apprentissage plus abrupte. Clisp avait une certaine beauté et élégance. Je ne suis pas sûr d'avoir le même sentiment de Clojure. Je me demande si ce sentiment va disparaître au fur et à mesure que je gagne en expérience.
Je devine encore ma mystérieuse répulsion. Je pense que ce pourrait être sa grande flexibilité. Par exemple, vous pouvez avoir des structures moitié vecteur et moitié carte et avec quelques caractères de code, vous pouvez les accepter en tant que paramètres, les séparer et les traiter correctement. Oui, cela enlève tout le standard, mais de toute façon ça ne se sent pas bien. C’est comme si vous ne saviez jamais très bien que les règles de toutes ces parenthèses, ces deux points, ces brakets, etc. fonctionnent.
Pour moi, j'aime toujours le langage pour tous ses avantages (principalement fonctionner dans la machine virtuelle Java et simplifier la concurrence, tout en étant beaucoup plus puissant et concis que Java et avec des défauts de conception moins évidents), mais le jury reste encore à déterminer si aurait pu être amélioré.
la source