คุณย้ายจาก Java ไป Ruby อย่างไร?
ในคู่มือนี้ คุณจะได้เรียนรู้ ความแตกต่างหลัก ระหว่างสองภาษา เพื่อช่วยให้คุณตัดสินใจเปลี่ยน
เหมาะสำหรับคนมากมายที่มองหาการย้ายจาก Java/C# ไป Ruby
แต...
หากคุณแค่อยากรู้ความแตกต่าง นี่ก็สำหรับคุณเช่นกัน
มาเริ่มกัน!
Static Typing vs Dynamic Typing
รูปแบบการพิมพ์ (Typing style) เป็นความแตกต่างที่ใหญ่ที่สุดและโดดเด่นที่สุดเมื่อดูโค้ดของภาษาโปรแกรมมิ่งใดภาษาหนึ่ง
สถานการณ์คือ:
- Java ใช้ static typing
- Ruby ใช้ dynamic typing
หมายความว่าอะไร อย่างแน่ชัด?
Typing หมายถึงวิธีที่ตัวแปรและอาร์กิวเมนต์ของเมธอดทำงาน
ภาษาที่พิมพ์แบบแข็งแกรบ (หรือ static) ต้องประกาศว่าตัวแปรแต่ละตัวสามารถรับประเภท (classes) อะไรได้บ้าง
มันมีลักษณะแบบนี้:
int n = 1;
ที่ int คือประเภท ในกรณีนี้ Integer
ทำไมสิ่งนี้จึงมีประโยชน์?
เพราะหากคุณพยายามกำหนดออบเจ็กต์ประเภทอื่นให้ตัวแปรนี้ คอมไพเลอร์จะยกเว้นข้อผิดพลาด และโปรแกรมของคุณจะรันไม่ได้เลย
นี่หมายความว่าคุณจะรู้ตลอดว่าคุณกำลังทำงานกับออบเจ็กต์ประเภทไหน
พร้อมข้อเสียคือความยืดหยุ่นน้อยกว่า
ในทางตรงข้าม...
Dynamic typing เน้นความยืดหยุ่น ตัวแปรไม่ถูกผูกมัดกับประเภทเฉพาะ ดังนั้นประเภทจึงสามารถเปลี่ยนได้
ตัวอย่าง:
n = 1 n = "abc"
ข้อเสียคือคุณอาจเจอข้อผิดพลาดมากขึ้น หากโค้ดของคุณไม่เรียบร้อย และคุณไม่ได้รับข้อมูลมากนักเมื่ออ่านโค้ด
นั่นคือความแตกต่างหลักหนึ่ง!
อีกในส่วนถัดไป
ไวยากรณ์: สิ่งง่ายๆ และ Boilerplate
Java เป็นราชาของ boilerplate
Boilerplate คือโค้ด "การตั้งค่า" ทั้งหมดที่คุณต้องเพิ่มเพื่อให้โค้ดของคุณถูกต้องตามไวยากรณ์
ผลคือ...
Java ทำให้สิ่งง่ายๆ กลายซับซ้อน!
Hello World ใน Java:
class Hello {
static public void main() {
System.out.println("Hello World");
}
}
จากนั้นคุณต้องคอมไพล์นี้เป็นไฟล์คลาส และรันมัน
สองขั้นตอน!
(IDE ช่วยเรื่องนี้)
ความแตกต่างอีกอย่างคือ นิพจน์ใน Java จบด้วย semicolon ซึ่งไม่จำเป็นใน Ruby คุณยังสามารถละเลย parentheses ใน Ruby ได้ส่วนใหญ่
Hello World ใน Ruby:
puts "Hello World"
ยัป
แค่นั้นแหละ
ดูเหมือน Ruby ให้โค้ดที่สะอาดกว่า ตกลงไหม?
เพิ่มเติม...
คุณสามารถรันโค้ดนี้ด้วยคำสั่งเดียวจากเทอร์มินัล!
ไม่ต้องมีขั้นตอนคอมไพล์
เล่นกับโค้ด: Built-In REPL
Ruby มาพร้อมกับ irb ซึ่งทำให้การทดสอบโค้ดเล็กน้อยเป็นเรื่องรวดเร็วมาก
คุณไม่ต้องเซฟไฟล์
หรือเปิดโปรแกรมแก้ไข!
Java ไม่มีสิ่งนี้ในตัว (built-in) อย่างน้อยจนถึง Java 9
ชื่อไฟล์และการจัดระเบียบไฟล์
Java บังคับโครงสร้างการตั้งชื่อไฟล์และการจัดระเบียบเฉพาะ
ตัวอย่าง:
หากคุณมีคลาส (public) ชื่อ Hello ชื่อไฟล์ ต้อง เป็น Hello.java
สิ่งนี้ไม่ใช่กรณีใน Ruby
นอกจากนี้ เราไม่มีแนวคิดของคลาส private ใน Ruby
การจัดการข้อยกเว้น (Exception Handling)
Java มีสองประเภทของข้อยกเว้น:
- Checked exception
- Unchecked exception
ความแตกต่าง?
คุณ ต้อง จัดการ checked exceptions!
หรือโปรแกรมของคุณจะรันไม่ได้
ตอนนี้:
Ruby มีเพียงหนึ่งประเภทของข้อยกเว้น
คุณสามารถจัดการได้หากต้องการ ตัวแปลภาษา (interpreter) จะไม่บ่น แต่โปรแกรมอาจจะพัง
คอมไพเลอร์และการอนุญาตภาษา (Licensing)
สุดท้าย มาพูดถึงการอนุญาต (licensing)
สิ่งนี้มักไม่ใช่ปัญหากับภาษาโปรแกรมมิ่ง
ทำไม?
เพราะพวกมันเป็นโอเพนซอร์ส โดยมีคนหนึ่งคนเป็นหัวหน้าผู้ดูแลและออกแบบ
Java แตกต่างตรงนี้
มันเป็นของบริษัทใหญ่ (Oracle) และนั่นมีผลต่อการอนุญาตของมัน
จริงๆ แล้ว:
มีสองรุ่นของ Java runtime "Oracle JDK" ซึ่ง (ถ้าผมเข้าใจถูก) เริ่มจากรุ่น 9 เป็นผลิตภัณฑ์เชิงพาณิชย์
จากนั้นคุณมี "Open JDK" ซึ่งก็เป็นของ Oracle เช่นกัน
แตมีสัญญาอนุญาตโอเพนซอร์ส
การกระจายไลบรารีและโค้ด
ความแตกต่างหลักอีกอย่าง หนึ่งในโปรดของผม (และของ Matz ด้วย) เกี่ยวกับ Ruby คือ RubyGems
มันทำให้การกระจายไลบรารี (เช่น HTTP clients) ง่ายขึ้นมาก
เพราะ:
- มีที่เก็บกลาง (central repository)
- มันรวมอยู่ในภาษา
- Gems โอเพนซอร์สจำนวนมากพร้อมใช้งานและหาง่าย
据我所知 Java ไม่มีอะไรใกล้เคียงกับนี้ ดังนั้นนี่คือ ชัยชนะใหญ่ สำหรับ Ruby
สรุป
คุณได้เรียนรู้เกี่ยวกับความแตกต่างหลักระหว่าง Java และ Ruby รวมถึง static typing, boilerplate และการตั้งชื่อไฟล์
ตอนนี้คุณพร้อมที่จะเข้าใจ Ruby ได้ดีขึ้น เพื่อตัดสินใจที่ถูกต้องสำหรับคุณ
ขอบคุณที่อ่าน! 🙂