در آموزش پیشین ، در مورد تبدیل نوع کلاس ها و همچنین ارث بری به قدر کافی صحبت شد. در این آموزش، قصد داریم تا در مورد «سر بارگذاری عملگرها» یا Operator Overloading بحث کنیم. وقتی یک کلاس جدید ایجاد میکنیم، به طور مستقیم نمی توانیم روی متغیرهای instance از عملگرها استفاده کنیم. به همین خاطر، مجبوریم که خودمان دوباره اپراتور ها را بازنویسی کنیم.
برای درک بهتر موضوع، وقتی یک عدد مانند ۱ را داخل یک متغیر قرار میدهید، یک شی از کلاس Fixnum ایجاد شده و این شی قابلیت این را دارد که با شی دیگری از کلاس Fixnum جمع بسته شود، از آن کم شود و … . بنابراین، نیاز به این داریم که تعریف کنیم عملگری مانند + وجود دارد که با استفاده از آن، میتوان عدد دیگری اضافه نمود. بیایید یک کلاس به نام TestNumber ایجاد کنیم و عملگر + را برایش تعریف کنیم.
class TestNumber
def initialize(x)
@x = x
end
def +(y)
@x + y
end
end
اگر دو شی از این کلاس ایجاد کنید و بخواهید روی آنها عملیات انجام دهید، حتما به مشکل میخورید. چرا که ما تعریف کردیم که متغیر x با y جمع شود و نه yی که در یک کلاس دیگر تعریف شده است.
برای این که x ما با yی که در یک کلاس دیگر تعریف شده است جمع بسته شود نیاز داریم تا متغیرهای instance آن کلاس را هم فراخوانی کنیم. پس کد ما به این شکل تغییر خواهد کرد :
class TestNumber
attr_accessor :x
def initialize(x)
@x = x
end
def +(other)
y = other.x
TestNumber.new(@x + y)
end
end
با استفاده از attr_accessor میتوانیم به متغیرهای instance دیگر کلاس ها دسترسی مستقیم داشته باشیم و مانند یک متد آنها را فراخوانی کنیم.
در این آموزش، مبحث Operator Overloading را پوشش دادیم. در آموزش های بعدی، به سایر مفاهیم و تکنیک های برنامه نویسی شی گرا در روبی خواهیم پرداخت.