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

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

جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 1 من 57.

تُقسَّم البرامج الحقيقية إلى عدة ملفات. يحمّل ملف Ruby ملفًا آخر باستخدام require_relative، متبوعًا بمسار الملف بالنسبة إلى الملف الحالي، وعادةً من دون اللاحقة .rb. بعد ذلك السطر، يمكن استخدام أساليب وفئات الملف المُحمَّل:

# greeting.rb
def greeting(name)
  "Hello, #{name}!"
end

# main.rb
require_relative 'greeting'
puts greeting("Ada")

يؤدي تشغيل ruby main.rb إلى طباعة Hello, Ada!: يحمّل main.rb الملف greeting.rb ثم يستدعي أسلوبه.

يبدأ البرنامج في الملف الذي تُشغّله، وهو هنا main.rb، وينفّذه Ruby من الأعلى إلى الأسفل. يشغّل require_relative الملف الآخر عند تلك النقطة، وذلك في المرة الأولى فقط: إذ تُعيد require_relative 'greeting' الثانية القيمة false ولا تفعل شيئًا. لا يمكن استخدام اسم إلا بعد تحميل الملف الذي يعرّفه:

# main.rb
# puts greeting("Bo")          # NoMethodError: greeting.rb لم يتم تحميله بعد
require_relative 'greeting'     # يشغّل greeting.rb، يُرجع true
require_relative 'greeting'     # محمّل بالفعل، يُرجع false
puts greeting("Bo")

التنظيم المعتاد هو وضع صنف واحد في كل ملف، مع تسمية الملف باسم الصنف بصيغة snake_case: يوجد class Dog في dog.rb، وclass BankAccount في bank_account.rb. في تحديات هذا القسم، يحتوي main.rb على كود الإدخال/الإخراج المزوَّد، ويبدأ بسطر require_relative واحد لكل ملف، وفق ترتيب التحميل: يُحمَّل أولًا الصنف الذي يبني عليه صنف آخر.

dog.rb            # class Dog ... end
bank_account.rb   # class BankAccount ... end
functions.rb      # دوال مساعدة
main.rb           # أسطر require_relative، ثم كود الإدخال/الإخراج

ما يشاركه الملف يعتمد على نوع الاسم. يمكن لكل ملف يتم تحميله بعد ذلك استخدام الأساليب المعرّفة باستخدام def في أعلى الملف، وكذلك الأصناف والثوابت. ينتمي المتغير المحلي إلى ملفه الخاص فقط:

# settings.rb
limit = 3                  # متغير محلي: فقط settings.rb يراه
MAX_ITEMS = 3              # ثابت: مرئي بعد التحميل
def limit_text
  "at most #{MAX_ITEMS}"
end

# main.rb
require_relative 'settings'
puts limit_text            # على الأكثر 3
puts MAX_ITEMS             # 3
# puts limit               # NameError: متغير محلي غير معرّف
challenge icon

التحدي

سهل

يتكوّن البرنامج من ملفين. يحمّل main.rb الملف greeting.rb، ويقرأ الأسماء ويطبع نتيجة greeting(name). أكمل greeting في greeting.rb بحيث يعيد Hello, Ada! للاسم Ada، أو Hello, friend! عندما يكون الاسم فارغًا.

يجب أن تضع التعليمات البرمجية الخاصة بك في greeting.rb. يحتوي main.rb على تعليمات برمجية لإدخال/إخراج مُقدَّمة، ولا يمكن تعديله.

جرّب بنفسك

require_relative 'greeting'

# كود الإدخال/الإخراج المُزوَّد: اتركه كما هو
input = []
while (line = gets)
  input << line.chomp
end
input.each { |name| puts greeting(name) }
quiz iconاختبر نفسك

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

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

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