จากหนังสือ Getting Clojure ออก beta version มา (Build your functional skills one idea at a time)
ซึ่งแบ่งเนื้อหาเป็น 3 ระดับคือ Basic, Intermediate และ Advance
พบว่ามีให้อ่านฟรี ๆ 3 บทคือ

เนื่องจากไม่เคยเขียนภาษานี้เลย
ดังนั้นก็ต้องเริ่มด้วย Hello Clojure สิ
เริ่มกันเลย

ในบทแรกนี้เป็นพื้นฐานสุด ๆ ของภาษา Clojure
ซึ่งในหนังสือใช้คำว่า Very Basic !!
ประกอบไปด้วย syntax, data type และ function
ไม่ต้องเรียนรู้เยอะ รู้เท่าที่จะเริ่มต้นได้ก่อนก็พอ

ก่อนจะเริ่มต้นอ่าน ผู้เขียนได้บอกไว้ 2 ข้อซึ่งน่าสนใจคือ

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

ข้อที่ 2
การเรียนรู้ภาษา Clojure นั้นต้องใช้ความพยายามสูง
แต่สิ่งที่ได้รับกลับมาก็น่าจะคุ้มค่านะ
เพราะว่า Clojure จะช่วยทำให้ code มัน clean ไม่เยิ้นเย้อ

ดังนั้นมาเริ่มเขียนดีกว่าจาก Very Basic

ก่อนอื่นต้องเตรียมเครื่องมือในการพัฒนาให้เรียบร้อย (Development tool)
แต่ว่ามีทางเลือกเยอะเลยนะ

แต่ในหนังสือจะใช้เครื่องมือชื่อว่า Leiningen อ่านว่า “LINE-ing-en”

ดังนั้นขั้นตอนแรกก็ติดตั้ง Leiningen ก่อนเลย

ใช้เวลานิดนึงนะครับ
ผลที่ได้ก็ตามนี้

เมื่อเครื่องมือพร้อมก็ต้อง Hello World สิ
ใช้งานผ่าน REPL ของ Leiningen นั่นเองดังนี้

คำอธิบาย

  • ข้อมูล string จะอยู่ภายในเครื่องหมาย double quote
  • comment ใช้เครื่องหมาย semicolon (;)
  • println คือชื่อ function ที่ถูกสร้างไว้ให้ใช้งานจาก Clojure
  • จะเห็นว่า การเรียกใช้งาน function จะอยู่ใน ( … ) เสมอ นี่คือรูปแบบการเรียกใช้ function นะ

โดยปกติการเรียกใช้งาน function จะเป็น println(“Hello World”)
นี่คืออีกเรื่องที่ นักพัฒนาต้องปรับเปลี่ยนและใช้เวลาในการฝึกพอควร !!
มาดูการเรียกใช้งาน function อื่น ๆ บ้าง

มาถึงตรงนี้ทำให้เราน่าจะพอคุ้นเคยกับตัวภาษามันบ้าง
บางคนบอกว่า เลิกดีกว่า
แต่ทนหน่อยนะ ไปต่อกัน

เรื่องต่อไปก็พวก บวก ลบ คูณ หาร

แน่นอนว่าจะขัดแย้งกับรูปแบบการเขียนแบบทั่วไป
ที่มักจะมีรูปแบบเป็น infix นั่นคือ 1 + 2 = 3
แต่ใน Clojure มันคือ (+ 1 2) นี่มัน prefix ชัด ๆๆ !!
มาลองฝึกกัน

ซึ่งมักจะมีคำถามเกี่ยวกับรูปแบบของภาษา ว่าทำไมต้องเป็น prefix ด้วย ?
เหตุผลคือ ลำดับการทำงานต้องเหมือนการพูด
ว่าคุณจะทำอะไร
ไม่ใช่ 1 บวก 2 แต่ต้องพูดว่า
เราจะบวก (+) เลข 1 เลข 2
นี่คือสิ่งที่ Clojure บอกว่ามันคือ Simplicity นั่นเอง

การประกาศตัวแปรต่าง ๆ และกำหนดค่า

ในภาษา Clojure นั้นมีแนวทางที่ต่างออกไป
แต่มันดูตรงไปตรงมา มีรูปแบบดังนี้

(def symbol value)

คำอธิบาย

  • symbol เทียบง่าย ๆ คือ ชื่อตัวแปรนั่นเอง
  • value คือ ค่าที่ต้องการจัดเก็บ หรือเป็น expression ก็ได้ ซึ่งจะถูก evaluate หรือประมวลผล
  • def คือการเชื่อมโยงหรือ binding ระหว่าง symbol และ value เข้าด้วยกัน

มาดูตัวอย่างการใช้งาน

สิ่งที่น่าสนใจคือ symbol นั่นเอง
ปกติชื่อตัวแปรจะมีข้อจำกัดมากมาย
แต่ใน symbol นั้นสามารถตั้งชื่อแบบนี้ได้ this&that|other*hellM*re
การตั้งชื่อ symbol มีกฏนิดหน่อย
ยกตัวอย่างเช่น
ไม่สามารถใช้ (, ), [, ], @ และ ^
เนื่องจากถูกใช้ในตัวภาษาไปแล้ว
รวมทั้งไม่สามารถนำหน้าด้วยตัวเลขและ colon (:) ได้เนื่องจากคือ keyword

ใน community ของ Clojure นิยมใช้ convention เรียกว่า kebab case
ยกตัวอย่างเช่น all-lowwer-case-with-words-separated-by-dashes

การสร้าง function

มาถึงอีกเรื่องที่น่าสนใจคือ การสร้าง function
สามารถเขียนได้ดังนี้
โดยกลับมาที่ hello world กัน

คำอธิบาย

  • ในการประกาศ function จะใช้ defn
  • parameter ของ function จะอยู่ใน [ parameter1 parameter2 ]
  • แต่ละ parameter ไม่จำเป็นต้องมีเครื่องหมาย comma คั่น เพียงใช้ spacebar ก็ได้
  • แต่สามารถใส่ comma ไปได้นะ ซึ่ง Clojure จะมองว่า comma คือ whitespace แต่เขาไม่ใส่กันนะ
  • จากนั้นในส่วนต่อมาคือ body ของการทำงาน ซึ่งจะเรียกว่า expression อยู่ในเครื่องหมาย ( expression )
  • จากตัวอย่างสามารถเขียนอยู่ในบรรทัดเดียวกันหรือแยกบรรทัดได้ ซึ่งขึ้นบรรทัดใหม่นั้น จะถูกมองเป็น whitespace
  • ถ้า function มีการทำงานยาว ๆ มักจะเว้นบรรทัด
  • ในแต่ละชั้นของการทำงานจะขึ้นด้วย 2 spacebar (ไม่เป็น tab นะ)
  • อีกอย่าง การ return ค่าออกจาก function จะไม่มี keyword return เหมือนที่เคยเขียนกันมา
  • โดยที่ expression สุดท้ายจะถูก return ออกจาก function นั้น ๆ เอง

ที่สำคัญคือ ไม่มีการประกาศชนิดของตัวแปรใด ๆ เลย
นั่นหมายความว่า ชนิดของตัวแปรจะถูกกำหนดเมื่อทำการกำหนดค่าให้ครั้งแรก
ซึ่งไม่สามารถเปลี่ยนชนิดได้อีกเลย
นี่คือสิ่งที่ Clojure เลือก เพื่อให้มีความยืดหยุ่นและกระชับ

มาถึงตรงนี้ก็จบในเรื่องแรก

สำหรับเริ่มต้นศึกษาภาษา Clojure ในช่วงวันหยุดสุดสัปดาห์
อย่างน้อยก็ Hello World ได้นะ

ชอบประโยคแรกของหนังสือ เลยเอามาใส่ตอนท้ายของการสรุปคือ
This is where the FUN starts …

ขอให้สนุกกับการ coding ครับ

Tags: