มีอะไรที่ยอดเยี่ยมเกี่ยวกับ Clojure [ปิด]


40

ฉันได้ดู Clojure เมื่อเร็ว ๆ นี้และฉันสะดุดโพสต์ใน Stackoverflowที่ระบุว่าโครงการบางอย่างปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดและรหัส Clojure ที่ดีโดยรวม ฉันต้องการเรียนภาษาอังกฤษหลังจากอ่านบทเรียนพื้นฐานบางอย่างดังนั้นฉันจึงดูโครงการ "โลกแห่งความจริง" บางอย่าง

หลังจากดูClojureScriptและCompojure (สองโครงการ "ดี" ดังกล่าวข้างต้น) ฉันแค่รู้สึกว่า Clojure เป็นเรื่องตลก ผมไม่เข้าใจว่าทำไมคนที่จะเลือก Clojure มากกว่าพูด, ทับทิมหรืองูหลามสองภาษาที่ฉันรักและมีเช่นไวยากรณ์ที่สะอาดและมีความง่ายต่อการรับขณะ Clojure ใช้มากวงเล็บและสัญลักษณ์ทุกที่ว่ามันซากปรักหักพังอ่านง่ายสำหรับ ฉัน.

ฉันคิดว่า Ruby และ Python นั้นสวยงามอ่านง่ายและสง่างาม อ่านง่ายแม้กับคนที่ไม่เข้าใจภาษา อย่างไรก็ตาม Clojure นั้นทึบสำหรับฉันและฉันรู้สึกว่าฉันต้องรู้รายละเอียดเล็ก ๆ น้อย ๆ เกี่ยวกับการใช้ภาษาเพื่อให้สามารถเข้าใจรหัสใด ๆ

ดังนั้นโปรดช่วยสอนฉันด้วย!

  • อะไรดีเกี่ยวกับ Clojure
  • ขั้นต่ำสุดที่ฉันควรรู้เกี่ยวกับภาษาคืออะไรเพื่อขอบคุณมัน

14
I don't understand why someone would pick Clojure over say, Ruby or Python- มันรันบน jvm และสามารถใช้ไลบรารี java ทั้งหมด ... have such a clean syntaxเนื้อหาที่กระเพื่อมเหมือนภาษาที่ใช้งานมีไวยากรณ์และโครงสร้างที่สะอาดมากซึ่งเป็นเพียงหนึ่งเดียวที่คนส่วนใหญ่ไม่คุ้นเคย

22
ชื่อของมันคือเซ็กซี่
โปรแกรมเมอร์

4
วัยรุ่นที่อาศัยอยู่ในห้องใต้ดินสามารถรับ Python และ Ruby ได้ในเวลาไม่กี่เดือน หากนั่นคือทั้งหมดที่พวกเขาต้องการใช้งานพวกเขาจะไม่ออกจากห้องใต้ดิน ฉันไม่ได้บอกว่าคนที่พัฒนา Python แบบมืออาชีพมานานหลายปีนั้นเป็นมนุษย์น้อยกว่าเมื่อเทียบกับคนที่เขียน C แบบฝังตัว แต่ถ้า Python และ Ruby เป็นสิ่งที่พวกเขารู้และทุกสิ่งที่พวกเขาต้องการรู้ โดยส่วนตัวแล้วฉันใช้เวลาส่วนตัวมากกว่า 6 ปีหลังจากสำเร็จการศึกษาเพื่อค้นพบและชื่นชมการเขียนโปรแกรมและ Lisps ปฏิกิริยาแรกของฉันต่อโครงการคือกระตุกเข่า
งาน

4
"เนื้อหาที่กระเพื่อมเหมือนภาษาใช้งานมีไวยากรณ์และโครงสร้างที่สะอาดมากซึ่งเป็นเพียงหนึ่งในคนส่วนใหญ่ที่ไม่คุ้นเคย": ฉันมีประสบการณ์น้อยมากกับ Lisp และฉันเพิ่งเริ่มอ่านหนังสือ จนถึงตอนนี้ฉันยังไม่พบปัญหาใด ๆ กับไวยากรณ์ IMHO ตำนานเกี่ยวกับไวยากรณ์เหมือนเสียงกระเพื่อมที่สามารถอ่านได้น้อยเป็นเพียง FUD
Giorgio

4
ฉันเริ่มดู Clojure เมื่อเร็ว ๆ นี้ (แต่ฉันเคยมีประสบการณ์กับ Haskell และ Scala มาก่อนดังนั้นไวยากรณ์จึงไม่น่าตกใจ) ฉันพบว่ามันอ่านได้อย่างน่าประหลาดใจจริงๆ มีfewสัญลักษณ์มากนอกวงเล็บเมื่อเทียบกับหลายภาษาและเกือบจะไม่มีคำพูดที่สงวนไว้ เหตุผลที่คุณพบว่าไม่สามารถอ่านได้เพราะมันเป็นกระบวนทัศน์ใหม่โดยสิ้นเชิงและทำงานในรูปแบบที่แตกต่างจากภาษา Object Oriented ทั่วไป ให้เวลาและพลังกับมัน
KChaloux

คำตอบ:


47

สำหรับพื้นหลังที่คุณให้ถ้าฉันถอดความ:

  1. คุณคุ้นเคยกับ Ruby / Python
  2. คุณยังไม่เห็นข้อดีของ Clojure
  3. คุณไม่พบไวยากรณ์ Lisp หรือ Clojure ที่ชัดเจน

... ฉันคิดว่าคำตอบที่ดีที่สุดคืออ่านหนังสือClojure Programmingโดย Emerick, Carper และ Grand หนังสือเล่มนี้มีการเปรียบเทียบรหัสอย่างชัดเจนกับ Python, Ruby และ Java และมีคำอธิบายข้อความที่ระบุถึงผู้เขียนโคเดอร์จากภาษาเหล่านั้น โดยส่วนตัวฉันมาที่ Clojure หลังจากสร้างโปรเจคขนาดใหญ่ที่มี Python และมีประสบการณ์เสียงกระเพื่อม การอ่านหนังสือเล่มนั้นช่วยโน้มน้าวให้ฉันเริ่มใช้ Clojure ไม่เพียง แต่ในด้านโครงการ แต่สำหรับมืออาชีพ

หากต้องการตอบคำถามสองข้อของคุณโดยตรง:

  1. มีอะไรดีเกี่ยวกับ Clojure คำตอบมากมายในไซต์นี้และที่อื่น ๆ เช่นดูhttps://www.quora.com/Why-would-someone-learn-Clojure
  2. ขั้นต่ำสุดที่ฉันควรรู้เกี่ยวกับภาษานั้นคืออะไรเพื่อชื่นชมมัน ฉันขอแนะนำให้รู้จักความคิดที่ยิ่งใหญ่ที่อยู่เบื้องหลังการออกแบบของ Clojure ซึ่งพูดได้ทั้งในClojure ProgrammingและThe Joy of Clojureหนังสือที่ชาญฉลาดและในการพูดคุยของ Rich Hickey พูดง่ายทำง่าย เมื่อคุณรู้ว่าอะไร / ทำไมคุณสามารถเริ่มทำความเข้าใจกับวิธีการอ่านรหัส Clojure, esp วิธีเปลี่ยนความคิดของคุณจากคลาส, วัตถุ, สถานะ / การกลายพันธุ์เป็น "แค่ฟังก์ชั่นและข้อมูล" (ฟังก์ชั่นลำดับสูงกว่า, แผนที่ / ชุด / ลำดับ, ประเภท)

คำแนะนำเพิ่มเติม: ความสง่างามและพลังของ Lisp นั้นมาจากไวยากรณ์ที่เรียบง่ายและเรียบง่ายที่สุด มันง่ายกว่ามากที่จะเห็นคุณค่าด้วยเครื่องมือแก้ไขที่ดีเช่น Emacs ที่มีโหมดซ่อนเร้นและ ParEdit ในขณะที่คุณคุ้นเคยกับมันมากขึ้นไวยากรณ์จะจางหายไปและคุณจะ "เห็น" ความหมายความตั้งใจและบทคัดย่อที่รัดกุม ประการที่สองอย่าเริ่มต้นด้วยการอ่านซอร์สสำหรับ ClojureScript หรือ Compojure สิ่งเหล่านั้นมากเกินไปในคราวเดียว ลองใช้ 4clojure.org เพื่อแก้ปัญหาและเปรียบเทียบวิธีแก้ปัญหากับผู้เข้ารหัสชั้นนำที่นั่น หากคุณเห็นวิธีแก้ปัญหาอื่น ๆ 4-6 คนคงมีคนเขียนโซลูชัน FP แบบสไตล์ที่เป็นไปตามกาลเวลาอย่างแท้จริงซึ่งคุณสามารถเปรียบเทียบกับโซลูชันที่ซับซ้อนและซับซ้อนที่ไม่จำเป็น


20

เสียงกระเพื่อมมีช่องที่ไม่ซ้ำกันเนื่องจากไวยากรณ์ที่เรียบง่ายของพวกเขา ไวยากรณ์อย่างง่ายนี้ทำให้การเขียนโปรแกรมเมตาผ่านการใช้งานของแมโครง่ายมาก สิ่งนี้ช่วยให้คุณสามารถสร้างแบบจำลองภาษาให้เหมาะกับโดเมนปัญหาของคุณแทนที่จะเป็นแบบจำลองเพื่อให้เหมาะสมกับโดเมนปัญหาของคุณเป็นภาษาของคุณ มันเจ๋งจริง ๆ เมื่อคุณมุ่งหน้าไปรอบ ๆ มันจะช่วยให้คุณทำสิ่งต่าง ๆ ได้ง่าย ๆ ซึ่งยากมากในภาษาอื่น

ข้อเสียคือเนื่องจากทุกโปรแกรมเสียงกระเพื่อมกำหนดภาษาของตัวเองเป็นหลักคุณต้องเข้าใจสิ่งที่เกิดขึ้นจริงเพื่อเข้าใจสิ่งที่เกิดขึ้น

ตอนนี้เพื่อตอบคำถามของคุณ ...

  1. Clojure เป็นภาษา Lisp สมัยใหม่ที่ทำงานใน JVM / CLR สิ่งนี้ทำให้ง่ายต่อการใช้ประโยชน์จากพลังของ Lisp ในโครงสร้างพื้นฐานที่มีอยู่

  2. จำเป็นต้องเข้าใจวิธีการใช้แมโครเพื่อสร้างเสียงกระเพื่อมไปยังโดเมนปัญหาของคุณเพื่อชื่นชมการใช้งาน ฉันเข้าใจสิ่งนี้จริงๆหลังจากใช้ Lisp runtime เมื่อฉันพบว่าคุณสมบัติหลักภาษาส่วนใหญ่สามารถนำไปใช้ใน Lisp ได้อย่างง่ายดาย ต้องใช้โครงการขนาดพอใช้ในการทำสิ่งนี้

ข้อดีของมันแม้ว่ามันจะสนุกในการเขียนโปรแกรม แต่โดยส่วนตัวฉันไม่มีหลายกรณีที่ฉันจะหันไปหาปัญหาประจำวัน มันเป็นเครื่องมือที่ดีมากในการเรียนรู้สำหรับการขยายความคิดและหลังจากการเรียนรู้ Lisp อย่างถูกต้องมันก็ยิ่งเป็นธรรมชาติมากขึ้นที่จะใช้ประโยชน์จากสิ่งอำนวยความสะดวกการเขียนโปรแกรมเมตาในภาษาอื่น ๆ

ไวยากรณ์ง่าย ๆ ทำให้คอมพิวเตอร์ตีความได้ง่าย (อนุญาตให้มาโครที่ทรงพลังเช่นนั้น) แต่มันทำให้มนุษย์แยกวิเคราะห์สำนวนที่ซับซ้อนได้ยากมาก


2
คุณดูตารางแสงหรือไม่?

4
คำตอบของคุณทำให้ดูเหมือนว่าแมโครเป็นวิธีปกติในการเขียนโปรแกรม Lisp เมื่อจริง ๆ แล้วปัญหาการเขียนโปรแกรมส่วนใหญ่สามารถแก้ไขได้ด้วยฟังก์ชั่นสามัญชั้นหนึ่ง มาโครส่วนใหญ่มีวัตถุประสงค์เพื่อใช้สำหรับการเขียนโปรแกรมภาษา (เช่นการขยายภาษา) ดูเพิ่มเติมbookshelf.jp/texi/onlisp/onlisp_9.html
Robert Harvey

3
@ RobertHarvey ฉันจะเถียงว่าถ้าคุณไม่ได้ใช้ประโยชน์จาก marcos มีภาษาอื่นอีกมากมายที่ฉันจะหันไปฟังก์ชั่นชั้นหนึ่งที่มีไวยากรณ์อ่านได้มากขึ้น
bunglestink

@MichaelT ที่ดูเรียบร้อย ฉันชอบแนวคิด
DPM

3
@RobertHarvey Scala, JavaScript, C #, Python และ Haskell อยู่ด้านบนสุดของหัวของฉันเท่าภาษาที่มีฟังก์ชั่นชั้นหนึ่งที่ฉันจะพิจารณาไวยากรณ์มนุษย์ที่แยกวิเคราะห์ได้ดีกว่า Lisps
bunglestink

10

จุดแข็งของ Clojure ได้รับการเน้นหลายครั้งและแน่นอนทำให้เป็นภาษาที่ทรงพลังมากดังนั้นฉันจะไม่ทำซ้ำพวกเขาที่นี่

ฉันรักเสียงกระเพื่อมเสมอตั้งแต่วันเดียวและฉันตื่นเต้นมากเมื่อฉันค้นพบ Clojure (บางทีโอกาสที่จะใช้เสียงกระเพื่อมนอกสถาบันการศึกษาในที่สุด!) อย่างไรก็ตามเมื่อฉันเริ่มเรียนรู้ความรู้สึกไม่สบายใจได้เริ่มคืบคลานเข้ามาแม้ว่าฉันจะไม่สามารถระบุได้อย่างชัดเจนว่าฉันไม่ชอบอะไร ก่อนอื่นฉันจะบอกว่าการเข้ารหัสใน Common lisp นั้นง่ายและสนุกสำหรับฉัน แต่ Clojure มีช่วงการเรียนรู้ที่ชันกว่า เสียงดังมีความงามและความสง่างามบางอย่าง ฉันไม่แน่ใจว่าฉันจะได้รับความรู้สึกเดียวกันจาก Clojure ฉันสงสัยว่าความรู้สึกนั้นจะหายไปหรือไม่เมื่อฉันได้รับประสบการณ์มากขึ้น

ฉันเดาอีกครั้งสำหรับความเขลาเล็กน้อยของฉัน ฉันคิดว่ามันอาจจะเป็นความยืดหยุ่นที่ดีมาก ตัวอย่างเช่นคุณสามารถมีโครงสร้างที่เป็นครึ่งหนึ่งของเวกเตอร์และครึ่งแผนที่และด้วยอักขระสองสามตัวของรหัสคุณสามารถยอมรับพวกเขาเป็นพารามิเตอร์แยกพวกเขาออกและดำเนินการอย่างถูกต้อง ใช่มันจะเอาหม้อไอน้ำออกทั้งหมด แต่อย่างใดมันก็รู้สึกไม่ถูกต้อง เป็นเหมือนที่คุณไม่เคยรู้กฎที่ดีภายใต้วงเล็บทั้งหมด colons, brakets และอื่น ๆ กำลังทำงานอยู่

สำหรับฉันฉันยังคงรักภาษาสำหรับข้อดีทั้งหมดของมัน (ส่วนใหญ่ทำงานใน JVM และลดความซับซ้อนของการทำงานพร้อมกันในขณะที่มีประสิทธิภาพมากขึ้นและกระชับกว่า Java และมีข้อบกพร่องการออกแบบที่เห็นได้ชัดน้อยลง) แต่คณะลูกขุน น่าจะได้รับการปรับปรุง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.