משתני מופע
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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סיכום — כרטיס ספרייה3מתודות ומשתנים של מחלקה
מתודות של מחלקהמשתני מופע של מחלקהקבועיםמתודות ליצירת מופעיםסיכום – קודי קופוןתרגלו בעצמכם: קומפיילר Ruby אונליין