سطح دسترسی

سطح دسترسی مشخص می‌کند که متدهای یک کلاس در چه جای برنامه قابل دسترسی هستند. توجه کنید که در Ruby، سطح دسترسی فقط برای متدها قابل تعریف است نه برای متغیرها و ثابت ها. در این درس می‌خواهیم به سطح دسترسی خصوصی (private) و عمومی (public) نگاهی بیندازیم. سطح دسترسی public زمانی مورد استفاده قرار می‌گیرد که شما بخواهید به یک متد در خارج از کلاس دسترسی یابید. به عنوان مثال به کد زیر توجه کنید :

 1: class Test
 2: 
 3:   public
 4:   def showMessage
 5:     puts "Hello World!"
 6:   end
 7: 
 8: end
 9: 
10: x = Test.new
11: x.showMessage
Hello World!

در این مثال در کلاس Test، یک متد به صورت public تعریف کرده ایم(خط 3). با تعریف این متد به صورت public می‌توانیم آن را در خارج از کلاس Test به آن دسترسی داشته باشیم (خط 11). البته به این نکته توجه کنید که سطح دسترسی تمام متدها در Ruby به صورت پیشفرض Public هست (به استثنای متد سازنده یا initialize) و در کد بالا شما حتی کلمه public را هم پاک کنید باز کد بدون مشکل اجرا می شود. حال اگر نخواهیم که به یک متد در خارج از کلاس دسترسی داشته باشیم باید آن را به صورت خصوصی یا (private) تعریف کنیم. برای این کار کافیست که به جای کلمه public در مثال بالا، کلمه private را بنویسیم:

 1: class Test
 2: 
 3:   private
 4:   def showMessage
 5:     puts "Hello World!"
 6:   end
 7: 
 8: end
 9: 
10: x = Test.new
11: x.showMessage
private method `showMessage' called for # (NoMethodError)

با اجرای برنامه بالا چون تابع به صورت خصوصی تعریف شده است، با خطا مواجه می شویم. برای تعریف چند متد به صورت public و private می توان به صورت زیر عمل کرد:

class MyClass

  def method1
    # Some code
  end

  def method2
    # Some code
  end

  def method3
    # Some code
  end

  public    :method1, :method2
  private   :method3
  
end

در Ruby، متغیرهای نمونه، به صورت پیشفرض، دارای سطح دسترسی private و ثابت ها دارای سطح دسترسی public هستند. علاوه بر سطوح دسترسی public و private، یک سطح دسترسی دیگر به نام protected در Ruby وجود دارد که در درس های آینده در مورد آن توضیح می دهیم.