รูบี้ (Ruby) เป็นภาษาโปรแกรมเชิงวัตถุที่มีความยืดหยุ่นและเป็นที่รู้จักในด้านความเรียบง่ายและประสิทธิภาพในการทำงาน ออกแบบมาให้เข้าใจง่ายและสนุกสำหรับนักพัฒนา รูบี้เน้นการเขียนโค้ดที่อ่านได้ง่าย ทำให้เข้าถึงได้สำหรับผู้เริ่มต้นและมีประสิทธิภาพสำหรับโปรแกรมเมอร์ที่มีประสบการณ์ เป็นภาษาที่ใช้ได้ทั่วไป โดยเฉพาะในการพัฒนาเว็บ โดยเฉพาะอย่างยิ่งกับเฟรมเวิร์ก Ruby on Rails ซึ่งมีอิทธิพลอย่างมากต่อภูมิทัศน์ของแอปพลิเคชันเว็บ
รูบี้ถูกสร้างขึ้นในช่วงกลางทศวรรษ 1990 โดย Yukihiro Matsumoto ในประเทศญี่ปุ่น มัตซูโมโตะมีเป้าหมายในการพัฒนาภาษาที่รวมเอาแง่มุมที่ดีที่สุดจากภาษาการเขียนโปรแกรมที่เขาชื่นชอบ เช่น Perl, Smalltalk, Eiffel, Ada และ Lisp การเปิดตัวสาธารณะครั้งแรกคือ Ruby 0.95 ในปี 1995 แต่ได้รับความสนใจอย่างกว้างขวางเมื่อมีการเปิดตัวเวอร์ชัน 1.0 ในปี 1996
ทศวรรษ 2000 เป็นจุดเปลี่ยนที่สำคัญสำหรับรูบี้ โดยเฉพาะอย่างยิ่งเมื่อมีการเปิดตัว Ruby on Rails ในปี 2004 โดย David Heinemeier Hansson Rails เป็นเฟรมเวิร์กสำหรับแอปพลิเคชันเว็บที่เน้นการใช้แนวทางตามข้อตกลงมากกว่าการกำหนดค่า ซึ่งช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันเว็บได้อย่างรวดเร็วและมีประสิทธิภาพ ส่งผลให้ความนิยมของรูบี้พุ่งสูงขึ้น และกลายเป็นภาษาที่เลือกใช้สำหรับสตาร์ทอัพและนักพัฒนาเว็บ
ปัจจุบัน รูบี้มีชุมชนที่มีชีวิตชีวาและระบบนิเวศที่หลากหลายของไลบรารีและเฟรมเวิร์ก แม้ว่าภาษาอื่น ๆ อาจครองภูมิทัศน์การพัฒนาเว็บ รูบี้ยังคงมีความเกี่ยวข้อง โดยเฉพาะสำหรับการพัฒนาแอปพลิเคชันอย่างรวดเร็วและการสร้างต้นแบบ ภาษาได้พัฒนาต่อไป โดยมีเวอร์ชันที่เสถียรล่าสุดคือ 3.1.2 ซึ่งรวมถึงการปรับปรุงประสิทธิภาพและฟีเจอร์ใหม่ ๆ ที่มุ่งเน้นการเพิ่มประสบการณ์ของนักพัฒนา
รูบี้เป็นภาษาที่เป็นเชิงวัตถุอย่างแท้จริง หมายความว่าทุกอย่างในรูบี้เป็นวัตถุ รวมถึงประเภทข้อมูลพื้นฐาน เช่น จำนวนเต็มและสตริง
class Dog
def bark
"Woof!"
end
end
dog = Dog.new
puts dog.bark # ผลลัพธ์: Woof!
รูบี้ใช้การกำหนดประเภทแบบไดนามิก ซึ่งอนุญาตให้ตัวแปรเก็บข้อมูลได้ทุกประเภทโดยไม่ต้องประกาศประเภทอย่างชัดเจน
x = 10
x = "Hello" # ไม่ต้องประกาศประเภท
รูบี้สนับสนุนบล็อกและตัววนซ้ำ ซึ่งเป็นสิ่งจำเป็นสำหรับสไตล์การเขียนโปรแกรมเชิงฟังก์ชันและการจัดการคอลเลกชันได้อย่างง่ายดาย
[1, 2, 3].each do |number|
puts number
end
รูบี้อนุญาตให้รวมโมดูลเข้ากับคลาส ซึ่งช่วยให้สามารถนำโค้ดกลับมาใช้ใหม่และมิกซินได้
module Swimmable
def swim
"I can swim!"
end
end
class Fish
include Swimmable
end
รูบี้มีกลไกการจัดการข้อยกเว้นที่แข็งแกร่งโดยใช้คีย์เวิร์ด begin
, rescue
, และ ensure
begin
1 / 0
rescue ZeroDivisionError
puts "Cannot divide by zero."
end
ไวยากรณ์ของรูบี้ถูกออกแบบมาให้อ่านและเขียนได้อย่างน่าพอใจ มักจะมีลักษณะคล้ายกับภาษาธรรมชาติ
if x > 10
puts "Greater than ten"
else
puts "Ten or less"
end
รูบี้ใช้การกำหนดประเภทแบบเป็ด ซึ่งช่วยให้มีความยืดหยุ่นมากขึ้นโดยมุ่งเน้นที่ว่าวัตถุสามารถตอบสนองต่อเมธอดได้หรือไม่ แทนที่จะมองที่คลาสของมัน
def quack(animal)
animal.quack if animal.respond_to?(:quack)
end
ฟังก์ชันในรูบี้เป็นพลเมืองระดับหนึ่ง ซึ่งอนุญาตให้สามารถกำหนดให้กับตัวแปรหรือส่งเป็นอาร์กิวเมนต์ได้
def greet
"Hello"
end
hello = method(:greet)
puts hello.call # ผลลัพธ์: Hello
รูบี้อนุญาตให้เมธอดมีพารามิเตอร์เริ่มต้น ซึ่งช่วยให้การเรียกเมธอดง่ายขึ้น
def greet(name = "World")
"Hello, #{name}!"
end
puts greet # ผลลัพธ์: Hello, World!
puts greet("Ruby") # ผลลัพธ์: Hello, Ruby!
รูบี้มีตัวดำเนินการเทอร์นารีที่กระชับสำหรับนิพจน์เงื่อนไข
status = (x > 10) ? "Greater" : "Lesser"
puts status
รูบี้เป็นภาษาที่ถูกตีความเป็นหลัก ซึ่งหมายความว่ามันจะทำงานโค้ดทีละบรรทัด ตัวแปลที่ใช้กันมากที่สุดคือ CRuby (MRI) ในขณะที่การนำไปใช้อื่น ๆ เช่น JRuby (Ruby บนแพลตฟอร์ม Java) และ Rubinius ก็มีอยู่เช่นกัน
บาง IDE ที่นิยมสำหรับรูบี้ ได้แก่:
รูบี้ใช้ Bundler ในการจัดการการพึ่งพา gem และโครงสร้างโปรเจกต์ทั่วไปอาจรวมถึง Gemfile
ซึ่งระบุการพึ่งพาทั้งหมด เพื่อสร้างโปรเจกต์รูบี้ ให้ทำตามขั้นตอนเหล่านี้:
bundle init
เพื่อสร้าง Gemfile
bundle install
app.rb
หรือไฟล์ที่คล้ายกันรูบี้ถูกใช้ในด้านการพัฒนาเว็บ โดยเฉพาะอย่างยิ่งกับเฟรมเวิร์ก Ruby on Rails เพื่อสร้างแอปพลิเคชันเว็บที่มีฐานข้อมูล แอปพลิเคชันที่น่าสนใจอื่น ๆ ได้แก่:
รูบี้มีความคล้ายคลึงและแตกต่างกับหลายภาษาโปรแกรม:
C# และ Java: เช่นเดียวกับภาษาเหล่านี้ รูบี้เป็นภาษาเชิงวัตถุ แต่รูบี้มีความยืดหยุ่นและไดนามิกมากกว่าเนื่องจากการกำหนดประเภทแบบเป็ดและไวยากรณ์ที่เรียบง่ายกว่า
Python: ทั้งรูบี้และไพธอนเน้นความสามารถในการอ่านและความเรียบง่าย อย่างไรก็ตาม ไวยากรณ์ของรูบี้มักถูกมองว่ามีความสวยงามมากกว่า ในขณะที่จุดแข็งของไพธอนอยู่ที่ไลบรารีที่กว้างขวางและการสนับสนุนจากชุมชน
JavaScript: วิธีการเชิงวัตถุของรูบี้แตกต่างจากโมเดลที่ใช้โปรโตไทป์ของ JavaScript รูบี้มีฟีเจอร์ในตัวมากมายที่ออกแบบมาเพื่อการพัฒนาเว็บ โดยเฉพาะอย่างยิ่งกับ Ruby on Rails
C++ และ Rust: ทั้งสองภาษาเน้นประสิทธิภาพและการเขียนโปรแกรมระดับระบบ ในขณะที่รูบี้มุ่งเน้นที่ความสะดวกในการใช้งานและการพัฒนาอย่างรวดเร็ว โดยอาจเสียสละประสิทธิภาพในกระบวนการ
PHP: แม้ว่าทั้งรูบี้และ PHP จะเป็นที่นิยมสำหรับการพัฒนาเว็บ แต่รูบี้ โดยเฉพาะอย่างยิ่งกับ Rails มีแนวทางที่มีโครงสร้างและสวยงามมากกว่าเมื่อเปรียบเทียบกับสไตล์การเขียนโปรแกรมที่เป็นเชิงกระบวนการของ PHP
สำหรับนักพัฒนาที่ต้องการแปลโค้ดรูบี้ไปยังภาษาอื่น สิ่งสำคัญคือต้องเข้าใจพาราไดม์ของทั้งสองภาษาที่เกี่ยวข้อง ไวยากรณ์เชิงวัตถุ ไดนามิก และแสดงออกของรูบี้อาจไม่มีเทียบเท่าที่ตรงไปตรงมาในภาษาที่มีการกำหนดประเภทแบบคงที่ เช่น C++ หรือ Java นักพัฒนาควรมุ่งเน้นไปที่การระบุแกนหลักของตรรกะและฟังก์ชันการทำงาน แทนที่จะพยายามแปลไวยากรณ์แบบ 1:1
ในขณะที่เครื่องมือการแปลจากแหล่งที่มาไปยังแหล่งที่มาโดยตรงสำหรับรูบี้อาจมีจำกัด แต่เครื่องมือและไลบรารีบางอย่าง เช่น "R2C" สำหรับการแปลงสคริปต์รูบี้เป็น C หรือเป้าหมายที่ใช้ LLVM สามารถช่วยในการผลิตโค้ดที่มีประสิทธิภาพมากขึ้น นอกจากนี้ การใช้ทรานสไพเลอร์สำหรับสถานการณ์ที่กว้างขึ้น เช่น การแปลงรูบี้เป็น JavaScript (เช่น Opal) ก็สามารถเป็นประโยชน์ในบางบริบทได้เช่นกัน