จากหนังสือ 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) แต่ว่ามีทางเลือกเยอะเลยนะ- Clojure command line tool
- ซึ่งใช้ได้กับ IDE/Text editor เช่น IntelliJ, Emacs, Cider และ Boot
ดังนั้นขั้นตอนแรกก็ติดตั้ง Leiningen ก่อนเลย
ใช้เวลานิดนึงนะครับ ผลที่ได้ก็ตามนี้ [gist id="ae5a6338a28c7c619f6dbb279efaf94e" file="1.txt"] เมื่อเครื่องมือพร้อมก็ต้อง Hello World สิ ใช้งานผ่าน REPL ของ Leiningen นั่นเองดังนี้ [gist id="ae5a6338a28c7c619f6dbb279efaf94e" file="2.txt"] คำอธิบาย- ข้อมูล string จะอยู่ภายในเครื่องหมาย double quote
- comment ใช้เครื่องหมาย semicolon (;)
- println คือชื่อ function ที่ถูกสร้างไว้ให้ใช้งานจาก Clojure
- จะเห็นว่า การเรียกใช้งาน function จะอยู่ใน ( ... ) เสมอ นี่คือรูปแบบการเรียกใช้ function นะ
มาถึงตรงนี้ทำให้เราน่าจะพอคุ้นเคยกับตัวภาษามันบ้าง บางคนบอกว่า เลิกดีกว่า แต่ทนหน่อยนะ ไปต่อกัน
เรื่องต่อไปก็พวก บวก ลบ คูณ หาร
แน่นอนว่าจะขัดแย้งกับรูปแบบการเขียนแบบทั่วไป ที่มักจะมีรูปแบบเป็น infix นั่นคือ 1 + 2 = 3 แต่ใน Clojure มันคือ (+ 1 2) นี่มัน prefix ชัด ๆๆ !! มาลองฝึกกัน [gist id="ae5a6338a28c7c619f6dbb279efaf94e" file="4.txt"] ซึ่งมักจะมีคำถามเกี่ยวกับรูปแบบของภาษา ว่าทำไมต้องเป็น prefix ด้วย ? เหตุผลคือ ลำดับการทำงานต้องเหมือนการพูด ว่าคุณจะทำอะไร ไม่ใช่ 1 บวก 2 แต่ต้องพูดว่า เราจะบวก (+) เลข 1 เลข 2 นี่คือสิ่งที่ Clojure บอกว่ามันคือ Simplicity นั่นเองการประกาศตัวแปรต่าง ๆ และกำหนดค่า
ในภาษา Clojure นั้นมีแนวทางที่ต่างออกไป แต่มันดูตรงไปตรงมา มีรูปแบบดังนี้ [code] (def symbol value) [/code] คำอธิบาย- symbol เทียบง่าย ๆ คือ ชื่อตัวแปรนั่นเอง
- value คือ ค่าที่ต้องการจัดเก็บ หรือเป็น expression ก็ได้ ซึ่งจะถูก evaluate หรือประมวลผล
- def คือการเชื่อมโยงหรือ binding ระหว่าง symbol และ value เข้าด้วยกัน
ใน community ของ Clojure นิยมใช้ convention เรียกว่า kebab case ยกตัวอย่างเช่น all-lowwer-case-with-words-separated-by-dashes
การสร้าง function
มาถึงอีกเรื่องที่น่าสนใจคือ การสร้าง function สามารถเขียนได้ดังนี้ โดยกลับมาที่ hello world กัน [gist id="ae5a6338a28c7c619f6dbb279efaf94e" file="7.txt"] คำอธิบาย- ในการประกาศ 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 ในช่วงวันหยุดสุดสัปดาห์ อย่างน้อยก็ Hello World ได้นะชอบประโยคแรกของหนังสือ เลยเอามาใส่ตอนท้ายของการสรุปคือ This is where the FUN starts …ขอให้สนุกกับการ coding ครับ