จากหนังสือ 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 อ่านว่า “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 ครับ