حياة

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

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

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

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

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

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

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

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

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

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

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

يضع "test_library included"
وحدة MyLibrary
فئة TestClass
تهيئة ديف
يضع "تم إنشاء كائن 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 المتغير الذي يخزن الدلائل التي تبحث فيها عن طريقة تتطلب ملفات روبي. بعد ذلك ، إذا كان الملف my_library.rb يتم تخزينها في دليل ليب ، ويمكن تحميلها في البرنامج الخاص بك مع بسيطة تتطلب "my_library" بيان.

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

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


شاهد الفيديو: سفرة وطبلية مع الشيف هالة فهمي - أسرار خاصة في طريقة تدميس الفول (يوليو 2021).