Menu
CoddyTech

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

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