التعامل مع الملفات
جزء من قسم البرمجة كائنية التوجه في رحلة 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، لذا تأتي أسطر 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 # الدوال العامة المشتركة بين جميع الأشكال: حمّل الملف أولًا
Circle.R # فئة الدائرة وطرائقها
main.R # source("Shape.R"); source("Circle.R"); يقرأ المُدخلات ويطبع النتائجتشغّل source() ملفًا في البيئة العامة، لذا تصبح دواله ومتغيراته أسماءً عامة. لا توجد في R أسماء خاصة بالملفات: إذا عرّف ملفان helper()، فسيكون تعريف الملف الذي شُغّل أخيرًا هو المعتمد. كذلك، لا تُطبع القيمة الموجودة في سطر منفرد داخل ملف تم تشغيله باستخدام source، لذا تستدعي الملفات التي يُفترض أن تعرض شيئًا cat():
# Tools.R
total <- 0 # متغير عام بعد تحميل الملف باستخدام source()
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 عبر الإنترنت