Clojure:
การจัดระเบียบโค้ดเข้าไปในฟังก์ชัน
วิธีการ:
ฟังก์ชันใน Clojure ถูกกำหนดด้วย defn
, ตามด้วยชื่อ, พารามิเตอร์ และเนื้อหา นี่คือตัวอย่างอย่างรวดเร็ว
(defn greet [name]
(str "Hello, " name "!"))
(greet "Alex") ; => "Hello, Alex!"
ตอนนี้มาพูดถึงเรื่องที่เราต้องการคำนวณพื้นที่ของสี่เหลี่ยมผืนผ้า แทนที่จะทำให้ทุกอย่างสับสนเข้าด้วยกัน เราแยกมันออกเป็นสองฟังก์ชัน:
(defn area [length width]
(* length width))
(defn print-area [length width]
(println "The area is:" (area length width)))
(print-area 3 4) ; => The area is: 12
ลงลึก
ในอดีต นักพัฒนาจะเพียงแค่ยัดโลจิกทั้งหมดเข้าไปในบล็อกเดียว มันน่าเกลียด แล้วโปรแกรมมิ่งแบบมีโครงสร้างก็เข้ามา และฟังก์ชันกลายเป็นสิ่งหนึ่ง ใน Clojure, ทุกฟังก์ชันเป็น first-class—คุณสามารถโยนพวกมันไปรอบๆ เหมือนกับค่าอื่นๆ
ทางเลือก? บางคนอาจจะยุ่งเกี่ยวกับ multi-methods หรือฟังก์ชันของระดับสูง แต่พวกนั้นเป็นเพียงเครื่องเทศในหม้อซุปฟังก์ชัน
ทุกสิ่งอยู่ในรายละเอียดของฟังก์ชัน: พวกเขาเป็น immutable ใน Clojure, ทำให้เกิดผลกระทบข้างเคียงน้อยลง พวกเขาพึ่งพาการเรียกซ้ำมากกว่าลูปทั่วไป ซึ่งเข้ากันได้ดีกับพาราไดม์การเขียนโปรแกรมแบบฟังก์ชันของภาษา
ดูเพิ่มเติม
- คู่มือของ Clojure เอง: https://clojure.org/guides/learn/functions
- พื้นฐานของการเขียนโปรแกรมแบบฟังก์ชัน: https://www.braveclojure.com/core-functions-in-depth/
- บรรยายของ Rich Hickey: https://changelog.com/posts/rich-hickeys-greatest-hits - สำหรับข้อมูลเชิงลึกเกี่ยวกับปรัชญาของ Clojure