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

دامنه متغیرها: محلی، نمونه (@)، کلاس (@@)، سراسری ($) و ثابت‌ها

دامنه (Scope) چیست؟

دامنه (Scope) مشخص می‌کند که یک متغیر در کجا قابل دسترسی است. روبی پنج نوع دامنه دارد.

۱. متغیر محلی (Local)

فقط در متد یا بلوکی که تعریف شده قابل دسترسی است:

def my_method
  x = 10  # متغیر محلی
  puts x
end

my_method  # => 10
# puts x  # => ❌ خطا! x خارج از متد قابل دسترسی نیست

بلوک‌ها به متغیرهای بیرونی دسترسی دارند

n = 5
3.times do |i|
  puts n  # => 5 (دسترسی به متغیر بیرونی)
  puts i  # => 0, 1, 2
end

۲. متغیر نمونه (Instance Variable — @)

مخصوص یک شی — بین متدهای همان شی مشترک است:

class Person
  def initialize(name)
    @name = name  # متغیر نمونه
  end

  def greet
    "سلام #{@name}!"  # دسترسی
  end

  def name
    @name
  end
end

person = Person.new("علی")
puts person.greet  # => سلام علی!
puts person.name   # => علی

۳. متغیر کلاس (Class Variable — @@)

بین همه اشیای یک کلاس مشترک است:

class Counter
  @@count = 0  # متغیر کلاس

  def initialize
    @@count += 1
  end

  def self.count
    @@count
  end
end

Counter.new
Counter.new
Counter.new
puts Counter.count  # => 3

۴. متغیر سراسری (Global — $)

همه‌جا قابل دسترسی است:

$app_name = "برنامه من"

def show_name
  puts $app_name  # قابل دسترسی
end

show_name  # => برنامه من
از متغیرهای سراسری اجتناب کنید! باعث کد نامنظم می‌شوند.

۵. ثابت‌ها (Constants)

با حرف بزرگ شروع می‌شوند و در کل کلاس/ماژول قابل دسترسی هستند:

class Circle
  PI = 3.14159  # ثابت

  def area(radius)
    PI * radius ** 2
  end
end

c = Circle.new
puts c.area(5)  # => 78.53975

جدول کامل دامنه‌ها

نوعپیشونددامنهمثال
محلی—متد/بلوکx
نمونه@یک شی@name
کلاس@@کل کلاس@@count
سراسری$همه‌جا$global
ثابتحرف بزرگکلاس/ماژولMAX_SIZE

self — شی فعلی

self به شی فعلی اشاره می‌کند:

class Person
  attr_accessor :name

  def initialize(name)
    @name = name
  end

  def introduce
    "من #{self.name} هستم"
  end
end

متغیرهای خاص روبی

متغیرتوضیح
selfشی فعلی
nilمقدار خالی
true / falseبولین
__FILE__نام فایل فعلی
__LINE__شماره خط فعلی
__dir__مسیر دایرکتوری
$0نام برنامه در حال اجرا
$ARGVآرگومان‌های خط فرمان

خلاصه

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

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