กระแส Ruby
www.tanabutr.co.th/photobook
เห็นคุณ bact's กับลังใช้ ruby เลยอยากปลุกกระแสบ้างโดยมาเรียน Ruby กันเถอะ. วันนี้เอาเรื่องคุณสมบัติของ ruby ก่อนแล้วกัน.
- ruby เป็นโปรแกรมแปลภาษา (intepreter)
ruby เป็นพวกเดียวกับ bash, awk, perl, python ฯลฯ ในแง่ที่ว่าเป็นโปรแกรมแปลภาษา. โปรแกรมภาษาพวกนี้เหมาะสำหรับเขียนสคริปต์เพราะการสร้างโปรแกรมด้วยตัวแปลภาษาพวกนี้ทำได้เร็ว, ไม่ยุ่งยากเมื่อเทียบกับภาษาคอมพิวเตอร์ที่ต้องคอมไพล์. สรุปง่ายๆคือใช้ง่ายและทำอะไรได้หลายอย่างด้วยการเขียนโค้ดสั้นๆ. - เป็นภาษาแบบ object oriented
ruby เป็นภาษาแบบ object oriented โดยกำเนิด. นาย Matsumoto Yukihiro ซึ่งเป็นคนสร้างภาษา ruby เขาตั้งใจตั้งแต่แรกออกแบบให้ ruby เป็นภาษาแบบ object oriented. ข้อมูลหรือค่าทุกอย่างเป็น object หมด. สร้าง class ได้, inherit คลาสได้. บางครั้งมีการซ่อนรูป, ใช้แล้วเหมือนไม่ได้ใช้ภาษา object oriented เช่นprint("Hello world\n")ดูแล้วเหมือนกับสั่งฟังก์ชั่นที่ชื่อ print มากกว่า เพราะถ้าเป็น object oriented แล้วต้องมี instance รับ message (method) อยู่.
- สามารถ port ใช้ได้หลายแพลตฟอร์ม
จะใช้กับ Linux หรือ Windows หรือแพลตฟอร์มอื่นๆก็ได้. ตัว ruby เองเขียนด้วยภาษา C ไม่ได้ใช้ไลบรารีพิเศษอะไร. - ควบคุมหน่วยความจำอัตโนมัติ
ไม่ต้องไปกังวลเรื่องการจองการใช้หน่วยความจำเหมือนภาษา C. มีตัว garbage collection ให้. - มีพวก exception handling
อิทธิพลจาก Java? ภาษาใหม่ก็มีกันทั้งนั้นรวมถึง ruby ด้วย. - ไม่มีประเภทของตัวแปร
ตัวแปรต่างๆที่ใช้ไม่มีประเภท (type) ทำให้ใช้สะดวก (ไม่อยากใช้คำว่าใช้ง่าย) - ไม่ต้องประกาศตัวแปร
อยู่สร้างตัวแปรขึ้นมาใช้ได้เลยแต่มีแบบรูปดังนี้คือ- foo local variable (ขึ้นต้นด้วยตัวเล็ก)
- $foo global variable (ขึ้นต้นด้วย $)
- @foo instance varible (ขึ้นต้นด้วย @)
- Foo constant (ขึ้นต้นด้วยตัวใหญ่)
ดูแล้วนึกถึงตอนเรียน perl ใหม่ๆในอดีต.... แต่ผมว่า concept ดีนะ, คือดูแล้วรู้เลยว่ามันตัวแปรไหนเป็นแบบใด
- ไวยกรณ์เป็นแบบ expression
พูดถึง expression แล้วนึกถึงภาษา lisp. เพราะ lisp มันเป็น expression. เขาบอกไว้ว่าถ้าเป็นภาษา C เขียนโค้ดดังต่อไปนี้แล้วจะมี error.result = if (cond) {process(val); } else {0;}เพราะว่าอันนี้มันเป็นไวยกรณ์ if (if statement). แต่ถ้าเป็น ruby, มันเป็น expression ทำให้เขียนแบบนี้ได้
result = if cond then process(val) else nil end
พูดง่ายๆว่าเหมือนกับ if มีอาร์กิวเมนต์หลายๆตัวเรียงต่อกันได้. if ในที่นี้ไม่ใช้ไวยกรณ์. หลายคนรู้สึกเหมือนกันว่า ruby มันคล้าย
lisp. - มี iterator
ไม่ค่อยรู้มากเกี่ยวกับเรื่องนี้ขอผ่าน. คล้ายกับ Iterator ใน STL ของ C++ แต่ใน ruby จะบอกว่าเหมือนกันหมดก็ไม่ได้. - เขียนไลบรารีของ ruby ด้วย C ได้
อันนี้ผมว่าจำเป็นนะ สะดวกดี (บางครั้ง). - มี thread
เขียนโปรแกรมแบบใช้ thread ได้. - มีไลบรารีให้ใช้เยอะ
จะได้เขียนโปรแกรมทำอะไรได้สะดวกๆ.
สรุปว่าเป็นภาษาที่ออกแบบมาดี, object oriented, เป็นตัวแปลภาษา, จับสิ่งดีๆของภาษาต่างมายำ, และบวกอะไรที่นอกเหนือจากนั้น (เช่นให้ method return ค่าหลายค่าได้). น่าใช้ครับ.
Reference:
- หนังสือ オブジェクト指向スクリプト言語 Ruby เขียนโดย まつもとひろゆき・石塚圭樹 (คนสร้างภาษาเขียนหนังสือเล่มนี้ร่วมกับอีกคน)
- Ruby ソースコード完全解説 เขียนโดย 青木峰郎 (หนังสืออ่านซอร์สโค้ดของ ruby)