הגדרת מחלקות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Ruby של Coddy. שיעור 2 מתוך 57.
מחלקה מתארת סוג של אובייקט: מה הוא יודע ומה הוא יכול לעשות. class Dog ... end מצהירה על המחלקה, ו-Dog.new יוצרת אובייקט מאותה מחלקה, מופע. אפשר לקרוא למתודה שהוגדרה באמצעות def בתוך המחלקה בכל מופע:
class Dog
def speak
"Woof"
end
end
rex = Dog.new
puts rex.speak
puts rex.classפלט:
Woof
Dognew יוצר את האובייקט ואז קורא למתודה initialize שלו עם הארגומנטים שנתת ל-new. המתודה initialize מאתחלת את האובייקט, בדרך כלל על ידי אחסון הארגומנטים במשתני מופע, ששמותיהם מתחילים ב-@:
class Dog
def initialize(name)
@name = name
end
def speak
"#{@name} says Woof"
end
end
puts Dog.new("Rex").speak
puts Dog.new("Bella").speakפלט:
Rex says Woof
Bella says Woofמתודות מקבלות ארגומנטים כמו כל מתודת Ruby אחרת ומחזירות את הערך של הביטוי האחרון שלהן. כל קריאה ל־new יוצרת אובייקט נפרד:
class Calculator
def add(a, b)
a + b
end
def average(numbers)
numbers.sum.to_f / numbers.size
end
end
calc = Calculator.new
puts calc.add(2, 3)
puts calc.average([1, 2, 3, 6])פלט:
5
3.0שמות מחלקות הם קבועים הכתובים ב-CamelCase (BankAccount); שמות של מתודות ומשתנים נכתבים ב-snake_case (deposit_money). new בודקת את הארגומנטים שלה מול initialize, ולכן ארגומנט חסר מעלה ArgumentError:
class Point
def initialize(x, y)
@x = x
@y = y
end
end
begin
Point.new(1)
rescue ArgumentError => e
puts e.message
endפלט:
wrong number of arguments (given 1, expected 2)אתגר
קלהשלם את המחלקה Formatter. המתודה שלה title(text) מחזירה את הטקסט כשכל מילה מתחילה באות גדולה (the hobbit מחזיר The Hobbit), המתודה slug(text) מחזירה את המילים באותיות קטנות ומחברת ביניהן באמצעות - (the-hobbit), והמתודה initials(text) מחזירה את האות הראשונה של כל מילה באות גדולה (TH).
הקוד שסופק יוצר אובייקט אחד של Formatter, ועבור כל שורת קלט מדפיס את שלוש התוצאות בשורות נפרדות.
הקוד שלך צריך להיכלל בקובץ formatter.rb. הקובץ main.rb מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.
נסו בעצמכם
require_relative 'formatter'
# קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input = []
while (line = gets)
input << line.chomp
end
formatter = Formatter.new
input.each do |line|
puts formatter.title(line)
puts formatter.slug(line)
puts formatter.initials(line)
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1מחלקות ואובייקטים
עבודה עם קבציםהגדרת מחלקותמשתני מופעמתודות ו־selfto_s ו־inspectסיכום — כרטיס ספרייה3מתודות ומשתנים של מחלקה
מתודות של מחלקהמשתני מופע של מחלקהקבועיםמתודות ליצירת מופעיםסיכום – קודי קופוןתרגלו בעצמכם: קומפיילר Ruby אונליין