روبی یک زبان برنامهنویسی پویا و شیءگرا است که به خاطر سادگی و بهرهوریاش شناخته شده است. این زبان به گونهای طراحی شده که برای توسعهدهندگان شهودی و لذتبخش باشد و بر روی نحو قابل خواندن برای انسان تأکید دارد، که آن را برای مبتدیان قابل دسترسی و برای برنامهنویسان با تجربه کارآمد میسازد. روبی یک زبان عمومی است که به طور گستردهای در توسعه وب استفاده میشود، به ویژه با فریمورک Ruby on Rails که تأثیر قابل توجهی بر روی چشمانداز برنامههای وب گذاشته است.
روبی در اواسط دهه 1990 توسط یوکیهیروماتسوموتو در ژاپن ایجاد شد. ماتسوموتو هدف داشت زبانی را توسعه دهد که بهترین جنبههای زبانهای برنامهنویسی مورد علاقهاش، از جمله پرل، اسمارتالک، ایفل، آدا و لیسپ را ترکیب کند. اولین نسخه عمومی، Ruby 0.95، در سال 1995 منتشر شد، اما با انتشار نسخه 1.0 در سال 1996 توجه گستردهای را جلب کرد.
دهه 2000 نقطه عطفی مهم برای روبی بود، به ویژه با انتشار Ruby on Rails در سال 2004 توسط دیوید هاینمییر هانسون. 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 "بزرگتر از ده"
else
puts "ده یا کمتر"
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) ? "بزرگتر" : "کوچکتر"
puts status
روبی عمدتاً مفسر است، به این معنی که کد را خط به خط اجرا میکند. رایجترین مفسر، CRuby (MRI) است، در حالی که پیادهسازیهای دیگری مانند JRuby (روبی بر روی پلتفرم جاوا) و Rubinius نیز وجود دارند.
برخی از محیطهای توسعه یکپارچه (IDEs) محبوب برای روبی شامل:
روبی از Bundler برای مدیریت وابستگیهای جواهر استفاده میکند و ساختار یک پروژه معمولی ممکن است شامل یک Gemfile
باشد که در آن تمام وابستگیها مشخص شدهاند. برای ایجاد یک پروژه روبی، مراحل زیر را دنبال کنید:
bundle init
را اجرا کنید تا یک Gemfile
ایجاد شود.bundle install
را اجرا کنید.app.rb
یا مشابه آن.روبی به طور خاص در توسعه وب، به ویژه با فریمورک Ruby on Rails، برای ایجاد برنامههای وب مبتنی بر پایگاه داده استفاده میشود. سایر کاربردهای قابل توجه شامل:
روبی شباهتها و تفاوتهایی با چندین زبان برنامهنویسی دارد:
C# و Java: مانند این زبانها، روبی شیءگرا است، اما روبی به دلیل نوعگذاری غاز و نحو سادهتر، پویا و انعطافپذیرتر است.
Python: هم روبی و هم پایتون بر خوانایی و سادگی تأکید دارند. با این حال، نحو روبی اغلب به عنوان زیباترین در نظر گرفته میشود، در حالی که قدرت پایتون در کتابخانههای گسترده و پشتیبانی جامعهاش نهفته است.
JavaScript: رویکرد شیءگرای روبی با مدل مبتنی بر پروتوتایپ جاوا اسکریپت در تضاد است. روبی ویژگیهای بیشتری را برای توسعه وب، به ویژه با Ruby on Rails، ارائه میدهد.
C++ و Rust: هر دو زبان بر عملکرد و برنامهنویسی سطح سیستم تأکید دارند، در حالی که روبی بر سهولت استفاده و توسعه سریع تمرکز دارد و در این فرآیند برخی از عملکردها را قربانی میکند.
PHP: در حالی که هم روبی و هم PHP برای توسعه وب محبوب هستند، روبی، به ویژه با Rails، رویکردی ساختاریافته و زیباتر را در مقایسه با سبک بیشتر رویهای PHP ارائه میدهد.
برای توسعهدهندگانی که به دنبال ترجمه کد روبی به زبان دیگری هستند، درک پارادایمهای هر دو زبان درگیر ضروری است. نحو شیءگرا، پویا و بیانی روبی ممکن است همیشه معادلهای مستقیمی در زبانهای نوعگذاری شده استاتیک مانند C++ یا Java نداشته باشد. توسعهدهندگان باید بر شناسایی منطق و عملکرد اصلی تمرکز کنند و نه تلاش برای ترجمه 1:1 نحو.
در حالی که ابزارهای مستقیم ترجمه کد به کد برای روبی به طور خاص ممکن است محدود باشند، برخی ابزارها و کتابخانهها، مانند "R2C" برای تبدیل اسکریپتهای روبی به C یا اهداف مبتنی بر LLVM، میتوانند در تولید کد کارآمدتر کمک کنند. علاوه بر این، استفاده از ترنسپایلرها برای سناریوهای گستردهتر، مانند تبدیل روبی به جاوا اسکریپت (به عنوان مثال، Opal)، نیز میتواند در برخی زمینهها مفید باشد.