التعامل مع الملفات
جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 1 من 57.
تُقسَّم البرامج الحقيقية إلى عدة ملفات. في R، يؤدي source("Greeting.R") إلى تشغيل ملف آخر من أوله إلى آخره، وتصبح كل دالة يعرّفها ذلك الملف متاحة بعد ذلك:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")يؤدي تشغيل main.R إلى طباعة Hello, Ada!: إذ يحمّل السطر source() الدالة greeting() قبل أن يستدعيها main.R.
يبدأ البرنامج في الملف الذي تُشغّله، وهو هنا main.R، ويقرأه R سطرًا بعد سطر. الترتيب مهم: لا توجد دالة إلا بعد أن تتم قراءة الملف الذي يعرّفها، لذلك تأتي أسطر source() في الأعلى:
# main.R
cat(greeting("Ada"), "\n") # خطأ: لم يتم العثور على الدالة "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # يعمل: greeting() موجودة الآنالتخطيط المعتاد هو فئة واحدة لكل ملف، ويُسمّى الملف باسم الفئة: يحتوي Account.R على مُنشئ account وطرقه، ويحتوي Shape.R على الدوال العامة الخاصة بـ shape. في تحديات هذا القسم، تضع الشيفرة في تلك الملفات، بينما يحتوي main.R على شيفرة الإدخال/الإخراج المقدَّمة، مع وجود أسطر source() في أعلاه بالترتيب الصحيح مسبقًا. يعرض المحرر كل ملف في علامة تبويب.
Shape.R # الـgenerics المشتركة بين كل الأشكال: قم بتحميله أولاً
Circle.R # فئة الدائرة وطرقها
main.R # source("Shape.R"); source("Circle.R"); يقرأ المدخلات، يطبع النتائجsource() يشغّل ملفًا في البيئة العامة، لذلك تصبح دواله ومتغيراته أسماءً عامة. لا يملك R أسماءً خاصة بالملفات: إذا عرّف ملفان helper()، يفوز الملف الذي تم تشغيله أخيرًا. كما أن القيمة الموجودة في سطر مستقل داخل ملف تم تشغيله باستخدام source لا تتم طباعتها، لذلك تستدعي الملفات التي ينبغي أن تعرض شيئًا cat():
# Tools.R
total <- 0 # متغير عام بمجرد تحميله
42 # لا يُطبع بواسطة source()
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # يُحمَّل لاحقًا: يستبدل الـ helper أعلاهالتحدي
سهليتكوّن البرنامج من ملفين. يستورد main.R الملف Greeting.R، ويقرأ الأسماء ويطبع نتيجة greeting(name) لكل اسم. أكمل greeting() في Greeting.R بحيث تُرجع Hello, Ada! للاسم Ada، أو Hello, friend! عندما يكون الاسم فارغًا.
يجب وضع التعليمات البرمجية الخاصة بك في Greeting.R. يحتوي main.R على تعليمات برمجية الإدخال/الإخراج المقدَّمة، ولا يمكن تحريره.
جرّب بنفسك
source("Greeting.R")
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1أساسيات S3
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكالتدرّب بنفسك: مترجم R عبر الإنترنت