متغیرها در روبی

تعریف متغیر، انواع متغیر (محلی، نمونه، کلاس، سراسری، ثابت)، قوانین نام‌گذاری

متغیر چیست؟

متغیر (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, _count2name, $price
فقط حرف، عدد و _user_2user-name, user@
حساس به حروفName ≠ name—
کلمات کلیدی ممنوع—if, for, class

سبک نام‌گذاری

سبکمثالکاربرد
snake_caseuser_nameمتغیر و متد (استاندارد روبی)
PascalCaseUserNameکلاس و ماژول
UPPER_CASEMAX_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

این مبحث بخشی از دوره آموزش کامل روبی است.

ابزارهای مرتبط