تعريف الفئات
جزء من قسم البرمجة كائنية التوجه في رحلة 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)التحدي
سهلأكمل الصنف 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
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتمتغيرات النسخةالأساليب و selfto_s و inspectمراجعة - بطاقة المكتبة7تعدد الأشكال والكتابة بأسلوب البطة
تعدد الأشكالالكتابة بأسلوب البطةالأساليب المجردةالحالات والفئاتمراجعة - طرق الدفع3أساليب ومتغيرات الأصناف
أساليب الأصنافمتغيرات كائنات الأصنافالثوابتأساليب الإنشاءمراجعة - رموز القسائمتدرّب بنفسك: مترجم Ruby عبر الإنترنت