Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

7 ความแตกต่างหลักระหว่าง Java และ Ruby: คู่มือชัดเจนสำหรับนักพัฒนา

คุณย้ายจาก 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 ได้ดีขึ้น เพื่อตัดสินใจที่ถูกต้องสำหรับคุณ

ขอบคุณที่อ่าน! 🙂