طريقة "مطلوب" في روبي

من أجل إنشاء مكونات قابلة لإعادة الاستخدام ، وهي مكونات يمكن استخدامها بسهولة في برامج أخرى ، يجب أن يكون للغة البرمجة طريقة ما لاستيراد هذا الرمز بسلاسة في وقت التشغيل. في روبي، ال تطلب يتم استخدام الأسلوب لتحميل ملف آخر وتنفيذ كل ملفاته صياغات. يخدم هذا لاستيراد كل فئة و طريقة التعاريف في الملف. بالإضافة إلى تنفيذ جميع العبارات الموجودة في الملف ببساطة ، فإن الطريقة المطلوبة تتبع أيضًا الملفات التي تم طلبها مسبقًا ، وبالتالي ، لن تتطلب ملفًا مرتين.

استخدام طريقة "تتطلب"

تأخذ الطريقة المطلوبة اسم الملف المطلوب ، كملف خيط، كحجة واحدة. يمكن أن يكون هذا مسارًا للملف ، مثل ./lib/some_library.rb أو اسم مختصر ، مثل بعض المكتبات. إذا كانت الوسيطة عبارة عن مسار واسم ملف كامل ، فستبدو الطريقة المطلوبة هناك للملف. ومع ذلك ، إذا كانت الوسيطة عبارة عن اسم مختصر ، فستبحث الطريقة المطلوبة من خلال عدد من الأدلة المحددة مسبقًا على نظامك عن هذا الملف. يعد استخدام الاسم المختصر هو الطريقة الأكثر شيوعًا لاستخدام الطريقة المطلوبة.

يوضح المثال التالي كيفية استخدام العبارة المطلوبة. الملف test_library.rb في مقطع التعليمات البرمجية الأول. يطبع هذا الملف رسالة ويحدد فئة جديدة. مقطع الكود الثاني هو الملف

instagram viewer
test_program.rb. يقوم هذا الملف بتحميل الملف test_library.rb ملف باستخدام هناكجيد ويخلق جديد TestClass موضوع.

يضع "test_library تضمين"
فئة TestClass
تهيئة def
يضع "كائن TestClass تم إنشاؤه"
النهاية
النهاية
#! / usr / bin / env ruby
تتطلب "test_library.rb"
ر = TestClass.new

تجنب اشتباكات الأسماء

عند كتابة مكونات قابلة لإعادة الاستخدام ، من الأفضل عدم التصريح عن العديد من المتغيرات في النطاق العالمي خارج أي فئات أو طرق أو باستخدام $ اختصار. هذا لمنع شيء يسمى "تلوث مساحة الاسم"إذا أعلنت عن عدد كبير جدا من الأسماء، فقد يعلن برنامج أو مكتبة أخرى نفس الاسم ويسبب تصادم الأسماء. عندما تبدأ مكتبتان غير مرتبطتين تمامًا بتغيير متغيرات بعضهما البعض عن طريق الخطأ ، فسوف تتعطل الأشياء - على ما يبدو بشكل عشوائي. هذا خطأ يصعب جدًا تتبعه ومن الأفضل تجنبه.

لتجنب تعارض الأسماء ، يمكنك إرفاق كل شيء في مكتبتك داخل وحدة بيان. سيتطلب هذا من الأشخاص الرجوع إلى صفوفك وطريقتك باسم مؤهل بالكامل مثل MyLibrary:: my_method، لكن الأمر يستحق ذلك لأن اشتباكات الأسماء لن تحدث بشكل عام. بالنسبة للأشخاص الذين يرغبون في الحصول على جميع أسماء فصولك وطرقك في النطاق العالمي ، يمكنهم القيام بذلك باستخدام تتضمن بيان.

يكرر المثال التالي المثال السابق ولكنه يرفق كل شيء في ملف مكتبتي وحدة. نسختين من my_program.rb أعطي؛ واحد يستخدم تتضمن بيان واحد الذي لا.

يضع "test_library تضمين"
الوحدة النمطية MyLibrary
فئة TestClass
تهيئة def
يضع "كائن TestClass تم إنشاؤه"
النهاية
النهاية
النهاية
#! / usr / bin / env ruby
تتطلب "test_library2.rb"
t = MyLibrary:: TestClass.new
#! / usr / bin / env ruby
تتطلب "test_library2.rb"
تشمل MyLibrary
ر = TestClass.new

تجنب المسارات المطلقة

نظرًا لأن المكونات القابلة لإعادة الاستخدام غالبًا ما يتم تحريكها ، فمن الأفضل أيضًا عدم استخدام المسارات المطلقة في المكالمات التي تتطلبها. المسار المطلق هو مسار مثل /home/user/code/library.rb. ستلاحظ أن الملف يجب أن يكون في هذا الموقع بالضبط حتى يعمل. إذا تم نقل النص البرمجي في أي وقت أو تغير دليل المنزل الخاص بك من أي وقت مضى ، فإن ذلك يتطلب بيانًا سيتوقف عن العمل.

بدلاً من المسارات المطلقة ، غالبًا ما يكون من الشائع إنشاء ملف ./lib دليل في دليل برنامج روبي الخاص بك. ال ./lib يضاف الدليل إلى $ LOAD_PATH المتغير الذي يخزن الدلائل التي تبحث فيها الطريقة المطلوبة عن ملفات Ruby. بعد ذلك ، إذا كان الملف my_library.rb مخزنة في الدليل lib ، يمكن تحميلها في البرنامج الخاص بك بطريقة بسيطة تتطلب "my_library" بيان.

المثال التالي هو نفس المثال السابق test_program.rb أمثلة. ومع ذلك ، فإنه يفترض test_library.rb يتم تخزين الملف في ./lib الدليل وتحميله باستخدام الطريقة الموضحة أعلاه.

#! / usr / bin / env ruby
$ LOAD_PATH << './lib'
تتطلب "test_library.rb"
ر = TestClass.new