متغيرات النسخة
جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 3 من 57.
يبدأ متغير المثيل بالرمز @ وينتمي إلى كائن واحد. وتظل القيمة المخزنة في initialize متاحة لكل طريقة من طرق ذلك الكائن، ولكل مثيل نسخته الخاصة:
class Dog
def initialize(name)
@name = name
end
def speak
"#{@name} says Woof"
end
end
rex = Dog.new("Rex")
bella = Dog.new("Bella")
puts rex.speak
puts bella.speakالناتج:
Rex says Woof
Bella says Woofيمكن للطرائق تغيير متغيرات الحالة، لذا يتذكر الكائن ما حدث له. وتشكل متغيرات الحالة الخاصة به معًا حالة الكائن:
class Counter
def initialize
@count = 0
end
def increment
@count += 1
end
def report
"count is #{@count}"
end
end
clicks = Counter.new
clicks.increment
clicks.increment
puts clicks.reportالناتج:
count is 2لا يمكن الوصول إلى متغيرات النسخة من خارج الكائن. لا يمكن للكود الخارجي استدعاء الأساليب إلا، لذلك يعرّف الصنف الذي يريد مشاركة قيمة أسلوبًا يعيدها، وهو قارئ:
class Dog
def initialize(name)
@name = name
end
def name
@name
end
end
rex = Dog.new("Rex")
puts rex.name
begin
rex.age
rescue NoMethodError => e
puts e.message
endالناتج:
Rex
undefined method `age' for an instance of Dogالمتغيّر العضوي الذي لم يتم إسناد قيمة إليه مطلقًا يكون nil ولا يثير أي خطأ، ولذلك يقرأ الاسم المكتوب خطأً بهدوء متغيّرًا مختلفًا وفارغًا. تسرد instance_variables المتغيّرات التي يمتلكها الكائن فعلًا:
class Lamp
def initialize
@on = false
end
def status
@onn.inspect
end
end
lamp = Lamp.new
puts lamp.status
p lamp.instance_variablesالناتج:
nil
[:@on]التحدي
سهلأكمل الصنف Pet. يخزّن initialize(name, species, age) القيم الثلاث، ويضيف birthday سنة واحدة إلى العمر، ويُرجع describe جملة واحدة: حيوان أليف اسمه Rex، ونوعه dog، وعمره 3 يعطي Rex is a 3 year old dog.
ينشئ الكود المُزوَّد كائن Pet من أسطر الإدخال الثلاثة الأولى (الاسم، والنوع، والعمر)، ويستدعي birthday بعدد المرات الذي يحدده السطر الرابع، ويطبع describe.
يجب أن تضع كودك في pet.rb. يحتوي main.rb على كود الإدخال/الإخراج المُزوَّد، ولا يمكن تعديله.
جرّب بنفسك
require_relative 'pet'
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input = []
while (line = gets)
input << line.chomp
end
pet = Pet.new(input[0], input[1], input[2].to_i)
input[3].to_i.times { pet.birthday }
puts pet.describe
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتمتغيرات النسخةالأساليب و selfto_s و inspectمراجعة - بطاقة المكتبة7تعدد الأشكال والكتابة بأسلوب البطة
تعدد الأشكالالكتابة بأسلوب البطةالأساليب المجردةالحالات والفئاتمراجعة - طرق الدفع3أساليب ومتغيرات الأصناف
أساليب الأصنافمتغيرات كائنات الأصنافالثوابتأساليب الإنشاءمراجعة - رموز القسائمتدرّب بنفسك: مترجم Ruby عبر الإنترنت