Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تعريف الفئات

جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 2 من 57.

يصف class نوعًا من الكائنات: ما يعرفه وما يستطيع فعله. يعلن 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).

ينشئ الكود المُ provided كائنًا واحدًا من Formatter، ولكل سطر إدخال يطبع النتائج الثلاث في أسطر منفصلة.

ضع الكود في formatter.rb. يحتوي main.rb على كود الإدخال/الإخراج المُ provided ولا يمكن تعديله.

صيغة الإخراج المطلوبة: [المحتوى المترجم هنا]

جرّب بنفسك

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 عبر الإنترنت