Menu
CoddyTech

التعامل مع الملفات

جزء من قسم البرمجة كائنية التوجه في رحلة 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 أعلاه
challenge icon

التحدي

سهل

يتكوّن البرنامج من ملفين. يستدعي 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 = "")
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم R عبر الإنترنت