Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

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