DEV Community

Phondanai
Phondanai

Posted on

ทดลองเขียน Clojure

Clojure เป็นภาษาสไตล์ภาษา LISP และรันอยู่บน Java Virtual Machine.

ก่อนจะเริ่มต้นใช้เราจำเป็นต้องติดตั้งซอฟต์แวร์ในเครื่องเราก่อน ของที่ต้องใช้เลยคือ Java (เค้าแนะนำเวอร์ชัน LTS ตอนนี้คือ 8 และ 11) และ Clojure
วิธีติดตั้งดูจากหน้านี้ได้เลย https://clojure.org/guides/getting_started

จากนั้น ใช้คำสั่ง clojure หรือ clj เพื่อเข้าโปรแกรม REPL (คล้ายๆ Python interpreter หรือ JavaScript console)
จะได้หน้าตาประมาณนี้

user=> _
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างโค้ด

user=> (println "Hello, world!")
"Hello, world!"
nil
user=> 1
1
user=> (+ 1 1)
2
user=> (+ 1 2 3 4 5 6)
21
user=> (* (+ 1 2) (- 9 8))
6
Enter fullscreen mode Exit fullscreen mode

เริ่มจากการเรียกฟังก์ชันก่อนเลย โดยใน Clojure จะมี form ในการเรียกฟังก์ชันคือ เริ่มต้นด้วยวงเล็บเปิด ( แล้วตามด้วยฟังก์ชันที่ต้องการรัน
ในตัวอย่างคือ + * และprintln ทุกฟังก์ชันจะมีการ return ข้อมูลกลับมาเสมอแม้กระทั่ง println แต่สังเกตให้ดีว่าค่าที่คืนกลับมานั้นคือ nil ไม่ใช่ string "Hello, world!" ที่เห็นมานั้นเป็น side effect ที่เกิดจากการเรียกฟังก์ชัน println

Data structure

Clojure เองก็มี data structure เตรียมมาให้เราได้ใช้ เช่น vector, list, map, set

  • vector เป็น data structure ที่เก็บข้อมูลแบบเรียงลำดับก่อนหลัง
  • list เหมือน vector แต่กระบวนการจัดเก็บภายในแตกต่างกัน (เป็นแบบ linked list)
  • map เก็บข้อมูลแบบ key-value หรือ hash
  • set เก็บข้อมูลแบบไม่เรียงลำดับ และ ข้อมูลข้างในไม่ซ้ำกัน
user=> [1 2 3]
[1 2 3]
user=> (first [1 2 3])
1
user=> '(1 2 3) ; หรือ (list 1 2 3)
(1 2 3)
user=> {:one 1 :two 2}
{:one 1 :two 2}
user=> (get {:one 1 :two 2} :one)
1
user=> #{1 2 3}
#{1 3 2}
Enter fullscreen mode Exit fullscreen mode

ฟังก์ชัน

แน่นอนว่า เราสามารถเขียนฟังก์ชันขึ้นมาใช้เองได้ นอกเหนือจากที่ Clojure มีมาให้ โครงสร้างของฟังก์ชันมีดังนี้

(defn function-name [param1 param2]
  body)
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างฟังก์ชันอย่างง่าย

user=> (defn my-plus [param1 param2]
         (+ param1 param2)) ; ค่าที่ return กลับไปคือบรรทัดสุดท้ายของส่วน body
#'user/my-plus
user=> (my-plus 10 20)
30
Enter fullscreen mode Exit fullscreen mode

Top comments (0)