متغیرها در روبی
تعریف متغیر، انواع متغیر (محلی، نمونه، کلاس، سراسری، ثابت)، قوانین نامگذاری
متغیر چیست؟
متغیر (Variable) مثل یک جعبه است که یک مقدار را در آن ذخیره میکنید. هر متغیر یک نام دارد که با آن به مقدار دسترسی پیدا میکنید.
# ساخت یک متغیر
name = "علی"
age = 25
puts name # علی
puts age # 25
تعریف متغیر در روبی
در روبی نیازی به تعریف نوع متغیر نیست. فقط نام = مقدار بنویسید:
# روبی خودش نوع را تشخیص میدهد
x = 5 # Integer (عدد صحیح)
y = 3.14 # Float (عدد اعشاری)
name = "علی" # String (رشته)
is_student = true # Boolean (بولین)
به این ویژگی «تایپ پویا» (Dynamic Typing) میگویند. برخلاف زبانهایی مثل C یا Java که باید نوع را مشخص کنید (
int x = 5;).انواع متغیر در روبی
روبی پنج نوع متغیر دارد که با پیشوند مشخص میشوند:
| نوع | پیشوند | مثال | دامنه |
|---|---|---|---|
| محلی (Local) | بدون پیشوند | name | داخل متد/بلوک |
| نمونه (Instance) | @ | @name | داخل یک شی |
| کلاس (Class) | @@ | @@count | داخل کل کلاس |
| سراسری (Global) | $ | $global | همهجا |
| ثابت (Constant) | حرف بزرگ | MAX_SIZE | همهجا |
۱. متغیر محلی (Local Variable)
متغیر محلی فقط در متد یا بلوکی که تعریف شده قابل دسترسی است:
def greet
name = "علی" # متغیر محلی
puts "سلام #{name}"
end
greet
# puts name # ❌ خطا! name خارج از متد قابل دسترسی نیست
۲. متغیر نمونه (Instance Variable)
متغیر نمونه با @ شروع میشود و مخصوص یک شی است:
class Person
def initialize(name)
@name = name # متغیر نمونه
end
def greet
puts "سلام #{@name}"
end
end
person = Person.new("علی")
person.greet # => سلام علی
۳. متغیر کلاس (Class Variable)
متغیر کلاس با @@ شروع میشود و بین همه اشیای یک کلاس مشترک است:
class Counter
@@count = 0 # متغیر کلاس
def initialize
@@count += 1
end
def self.count
@@count
end
end
Counter.new
Counter.new
puts Counter.count # => 2
۴. متغیر سراسری (Global Variable)
متغیر سراسری با $ شروع میشود و همهجا قابل دسترسی است:
$app_name = "برنامه من"
def show_name
puts $app_name # قابل دسترسی
end
show_name
از متغیرهای سراسری اجتناب کنید! آنها باعث کد نامنظم و پر از باگ میشوند.
۵. ثابتها (Constants)
ثابتها با حرف بزرگ شروع میشوند و مقدار آنها نباید تغییر کند:
PI = 3.14159
MAX_USERS = 100
APP_NAME = "لرنینگ سیتی"
puts PI # => 3.14159
puts MAX_USERS # => 100
روبی اجازه تغییر ثابتها را میدهد اما یک هشدار نمایش میدهد. بهتر است آنها را تغییر ندهید.
قوانین نامگذاری متغیر
| قانون | مثال درست | مثال غلط |
|---|---|---|
| با حرف یا _ شروع شود | name, _count | 2name, $price |
| فقط حرف، عدد و _ | user_2 | user-name, user@ |
| حساس به حروف | Name ≠ name | — |
| کلمات کلیدی ممنوع | — | if, for, class |
سبک نامگذاری
| سبک | مثال | کاربرد |
|---|---|---|
| snake_case | user_name | متغیر و متد (استاندارد روبی) |
| PascalCase | UserName | کلاس و ماژول |
| UPPER_CASE | MAX_SIZE | ثابتها |
تخصیص موازی (Parallel Assignment)
روبی امکان تخصیص چند متغیر را در یک خط فراهم میکند:
چند متغیر، چند مقدار
x, y, z = 1, 2, 3
puts x, y, z # 1 2 3
name, age, city = "علی", 25, "تهران"
puts name, age, city
جابجایی مقادیر (Swap)
x = 5
y = 10
# جابجایی بدون متغیر کمکی!
x, y = y, x
puts x # 10
puts y # 5
در روبی برای جابجایی دو متغیر نیازی به متغیر کمکی ندارید — فقط
x, y = y, x!بررسی نوع متغیر
با متد .class میتوانید نوع متغیر را ببینید:
x = 5
puts x.class # => Integer
y = 3.14
puts y.class # => Float
name = "علی"
puts name.class # => String
متغیرهای خاص روبی
| متغیر | توضیح |
|---|---|
self | شی فعلی |
nil | مقدار خالی (مثل null) |
__FILE__ | نام فایل فعلی |
__LINE__ | شماره خط فعلی |
__dir__ | مسیر دایرکتوری فعلی |
خلاصه
| عملیات | سینتکس |
|---|---|
| تعریف | x = 5 |
| تغییر | x = 10 |
| موازی | x, y = 1, 2 |
| جابجایی | x, y = y, x |
| نوع | x.class |
| نمونه | @name |
| کلاس | @@count |
| سراسری | $global |
| ثابت | MAX_SIZE |
این مبحث بخشی از دوره آموزش کامل روبی است.