Menu
Coddy logo textTech

הגדרת מחלקות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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
Dog

new יוצר את האובייקט ואז קורא למתודה 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)
challenge icon

אתגר

קל

השלם את המחלקה 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
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Ruby אונליין