القوائم باستخدام فئة
جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 2 من 57.
S3 هو أقدم نظام كائنات وأكثرها استخدامًا في R. كائن S3 هو قائمة عادية لها سمة class، وهي تسمية توضح نوع الكائن. يعيّن class(x) <- "dog" هذه التسمية:
rex <- list(name = "Rex", age = 3)
class(rex) <- "dog"
print(class(rex))
cat(rex$name, "is", rex$age)الناتج:
[1] "dog"
Rex is 3structure() تنشئ القيمة وتضبط سماتها في استدعاء واحد، وهي الطريقة المعتادة لإنشاء كائن S3. تتم قراءة الحقول باستخدام $ كما هو الحال في أي قائمة:
rex <- structure(list(name = "Rex", age = 3), class = "dog")
print(class(rex))
print(is.list(rex))
print(rex$age)الناتج:
[1] "dog"
[1] TRUE
[1] 3الفئة مجرد تسمية: لا تتحقق R من الحقول التي يحتوي عليها الكائن، لذا يمكن تسمية أي قائمة dog. تزيل unclass() التسمية وتعيد القائمة العادية:
p <- structure(list(x = 1, y = 2), class = "point")
print(unclass(p))الناتج:
$x
[1] 1
$y
[1] 2كائنات S3 هي قيم. الدالة التي تغيّر كائنًا تغيّر نسختها الخاصة منه، ولذلك تُرجع الإصدار الجديد ويُسنِده المستدعي. وتبقى النسخة الأصلية كما كانت:
birthday <- function(d) {
d$age <- d$age + 1
d
}
rex <- structure(list(name = "Rex", age = 3), class = "dog")
older <- birthday(rex)
cat(rex$age, older$age)الناتج:
3 4التحدي
سهلأكمل make_pet(name, species, age) في Pet.R. تُرجع قائمة تحتوي على الحقول name وspecies وage بهذا الترتيب، والصنف pet. ثم أكمل describe_pet(p)، التي تُرجع جملة واحدة: حيوان أليف اسمه Rex، ونوعه dog، وعمره 3 يعطي Rex is a 3 year old dog.
يقرأ الكود المُزوَّد الاسم والنوع والعمر، وينشئ الحيوان الأليف، ثم يطبع صنفه وأسماء حقوله والجملة.
ضع الكود الخاص بك في Pet.R. يحتوي main.R على كود الإدخال/الإخراج المُزوَّد، ولا يمكن تعديله.
جرّب بنفسك
source("Pet.R")
# كود الإدخال/الإخراج المُزوَّد: اتركه كما هو
input <- suppressWarnings(readLines(file("stdin")))
p <- make_pet(input[1], input[2], as.numeric(input[3]))
cat("class: ", class(p), "\n", sep = "")
cat("fields: ", paste(names(p), collapse = ", "), "\n", sep = "")
cat(describe_pet(p), "\n", sep = "")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1أساسيات S3
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكالتدرّب بنفسك: مترجم R عبر الإنترنت