Saya telah melihat Clojure belakangan ini dan saya menemukan posting ini di Stackoverflow yang mengindikasikan beberapa proyek mengikuti praktik terbaik, dan kode Clojure yang baik secara keseluruhan. Saya ingin memahami bahasa setelah membaca beberapa tutorial dasar sehingga saya melihat beberapa proyek "dunia nyata".
Setelah melihat ClojureScript dan Compojure (dua proyek "baik" yang disebutkan di atas), saya merasa Clojure hanya lelucon. Saya tidak mengerti mengapa seseorang akan memilih Clojure daripada mengatakan, Ruby atau Python, dua bahasa yang saya sukai dan memiliki sintaksis yang bersih dan sangat mudah untuk mengambil sedangkan Clojure menggunakan begitu banyak tanda kurung dan simbol di mana-mana sehingga merusak pembacaan untuk saya.
Saya pikir Ruby dan Python itu indah, mudah dibaca, dan elegan. Mereka mudah dibaca bahkan untuk seseorang yang tidak tahu bahasa luar dalam. Namun, Clojure adalah buram bagi saya dan saya merasa seperti saya harus tahu setiap detail kecil tentang implementasi bahasa agar dapat memahami kode apa pun.
Jadi tolong, beri tahu saya!
- Apa yang baik tentang Clojure?
- Apa minimum absolut yang harus saya ketahui tentang bahasa untuk menghargainya?
I don't understand why someone would pick Clojure over say, Ruby or Python
- Ini berjalan di jvm dan dapat menggunakan seluruh perpustakaan java.... have such a clean syntax
bisa dibilang, bahasa fungsional seperti cisp memiliki sintaks dan struktur yang sangat bersih, itu hanya satu kebanyakan orang tidak terbiasa.few
simbol di luar kurung dibandingkan dengan banyak bahasa, dan hampir tidak ada kata-kata yang dipesan. Alasan Anda menemukannya tidak dapat dibaca adalah karena itu adalah paradigma yang benar-benar baru dan bekerja dengan cara yang berbeda secara fundamental dari bahasa Object Oriented. Berikan waktu dan kekuatan untuk melewatinya.Jawaban:
Untuk latar belakang yang Anda berikan, jika saya dapat parafrase:
... Saya pikir jawaban terbaik adalah membaca buku Programming Clojure oleh Emerick, Carper dan Grand. Buku ini memiliki banyak perbandingan kode eksplisit dengan Python, Ruby, dan Java, dan memiliki penjelasan teks yang membahas coders dari bahasa-bahasa tersebut. Secara pribadi, saya datang ke Clojure setelah membangun proyek-proyek berukuran besar dengan Python, dan memiliki beberapa pengalaman Lisp; membaca buku itu membantu meyakinkan saya untuk mulai menggunakan Clojure tidak hanya dalam proyek sampingan tetapi untuk tujuan profesional.
Untuk menjawab dua pertanyaan Anda secara langsung:
Saran tambahan: keanggunan dan kekuatan Lisp sebagian dari sintaksisnya yang minimalis dan sangat konsisten. Jauh lebih mudah untuk menghargai itu dengan editor yang baik, misalnya Emacs dengan mode-clojure dan ParEdit. Ketika Anda semakin terbiasa dengan itu, sintaks memudar dan Anda akan "melihat" semantik, niat, dan abstraksi singkat. Kedua, jangan mulai dengan membaca sumber untuk ClojureScript atau Compojure, itu terlalu banyak; coba beberapa masalah 4clojure.org, dan bandingkan solusi dengan coders teratas di sana. Jika Anda melihat 4-6 solusi lain, selalu seseorang akan menulis solusi FP-style yang benar-benar idiomatis, ringkas yang dapat Anda bandingkan dengan solusi gaya imperatif yang canggung, bertele-tele, dan rumit.
sumber
Lisp dialek memiliki niche unik karena sintaksisnya yang sederhana. Sintaks sederhana ini membuat pemrograman meta melalui penggunaan makro sangat sederhana. Ini memungkinkan Anda untuk memodelkan bahasa yang sesuai dengan domain masalah Anda alih-alih pemodelan agar sesuai dengan domain masalah Anda ke dalam bahasa Anda. Ini benar-benar keren setelah Anda memahaminya, dan memungkinkan Anda melakukan banyak hal dengan mudah yang sangat sulit dalam bahasa lain.
The downside, adalah bahwa karena setiap program Lisp pada dasarnya mendefinisikan bahasanya sendiri, Anda benar-benar membutuhkan pemahaman yang kuat pada hal-hal untuk memahami apa yang sedang terjadi.
Sekarang, untuk menjawab pertanyaan Anda ...
Clojure adalah dialek Lisp modern yang beroperasi di JVM / CLR. Ini membuatnya mudah untuk mengambil keuntungan dari kekuatan Lisp dalam infrastruktur yang ada.
Sangat penting untuk memahami bagaimana menggunakan makro untuk membangun Lisp ke domain masalah Anda untuk menghargai penggunaannya. Saya benar-benar hanya mengerti ini setelah mengimplementasikan runtime Lisp, ketika saya menemukan bahwa banyak fitur bahasa inti dapat dengan mudah diimplementasikan dalam Lisp itu sendiri. Dibutuhkan proyek berukuran adil untuk mendapatkan ini.
Selain itu, meskipun menyenangkan untuk diprogram, saya pribadi tidak memiliki banyak kasus di mana saya akan beralih ke masalah sehari-hari. Ini adalah alat yang sangat bagus untuk belajar ekspansi pikiran, dan setelah mempelajari Lisp dengan benar, menjadi lebih alami untuk memanfaatkan fasilitas pemrograman meta dalam bahasa lain.
Sintaks sederhana membuatnya mudah bagi komputer untuk mengartikannya (memungkinkan makro yang kuat dan mudah), tetapi membuatnya sangat sulit bagi manusia untuk mengurai ekspresi kompleks dengan cepat.
sumber
Kekuatan Clojure telah disorot berkali-kali, dan, tentu saja, membuat bahasa yang sangat kuat, jadi saya tidak akan mengulanginya lagi di sini.
Saya selalu mencintai cisp, sejak masa lalu dan saya sangat senang ketika saya menemukan Clojure (mungkin kesempatan menggunakan cisp di luar akademisi akhirnya!). Namun ketika saya mulai belajar perasaan gelisah telah mulai merayap masuk, meskipun saya tidak dapat menentukan dengan tepat apa yang tidak saya sukai. Pertama-tama saya akan mengatakan bahwa pengkodean dalam Common lisp mudah dan menyenangkan bagi saya tetapi Clojure memiliki kurva belajar yang lebih curam. Clisp memiliki keindahan dan keanggunan tertentu. Saya tidak yakin saya akan mendapatkan perasaan yang sama dari Clojure. Saya bertanya-tanya apakah perasaan itu akan hilang ketika saya mendapatkan lebih banyak pengalaman.
Saya punya tebakan lain untuk sedikit penolakan misterius saya. Saya pikir itu mungkin fleksibilitasnya. Misalnya Anda dapat memiliki struktur setengah vektor dan setengah peta dan dengan beberapa karakter kode Anda dapat menerimanya sebagai parameter, pisahkan dan proses dengan benar. Ya, itu menghapus semua boilerplate, tetapi entah bagaimana rasanya tidak benar. Seolah-olah Anda tidak pernah tahu betul aturan di bawah semua tanda kurung, titik dua, tanda kurung, dll yang beroperasi.
Bagi saya, saya masih suka bahasa untuk semua kelebihannya (terutama, berjalan di JVM dan menyederhanakan konkurensi, sementara jauh lebih kuat, dan ringkas daripada Jawa dan dengan cacat desain yang kurang jelas), tetapi juri masih tidak yakin apakah sesuatu bisa ditingkatkan.
sumber