دامنه متغیرها در روبی
دامنه متغیرها: محلی، نمونه (@)، کلاس (@@)، سراسری ($) و ثابتها
دامنه (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 | آرگومانهای خط فرمان |
خلاصه
- محلی — فقط در متد/بلوک
- @ — متغیر نمونه، مخصوص یک شی
- @@ — متغیر کلاس، بین همه اشیا مشترک
- $ — متغیر سراسری (اجتناب کنید)
- UPPER_CASE — ثابت
این مبحث بخشی از دوره آموزش کامل روبی است.