المتغيرات العالمية في روبي

click fraud protection

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

تحديد المتغيرات العالمية

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


سرعة $ = 10. تسريع def. سرعة $ = 100. النهاية. def pass_speed_trap. إذا كانت سرعة $> 65. # امنح البرنامج تذكرة مسرعة. النهاية. النهاية. تسريع. pass_speed_trap. 

لا يحظى بشعبية

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

instagram viewer

لكن هذا لا يعني أن المتغيرات العالمية أبدا تستخدم في روبي. هناك عدد من المتغيرات العالمية الخاصة بأسماء أحادية الحرف (a-la بيرل) التي يمكن استخدامها في جميع أنحاء برنامجك. إنها تمثل حالة البرنامج نفسه ، وتقوم بأشياء مثل تعديل السجل والفواصل الميدانية للجميع يحصل على طرق.

المتغيرات العالمية

  • $0 - هذا المتغير ، الذي يُشار إليه بـ 0 دولار (وهو صفر) ، يحمل اسم نص المستوى الأعلى الذي يتم تنفيذه. بمعنى آخر ، ملف البرنامج النصي الذي تم تشغيله من سطر الأوامر، وليس ملف البرنامج النصي الذي يحمل رمز التنفيذ الحالي. حتى إذا script1.rb تم تشغيله من سطر الأوامر ، فإنه سيصمد script1.rb. إذا تطلب هذا البرنامج النصي script2.rb، $ 0 في هذا الملف النصي سيكون أيضًا script1.rb. يعكس الاسم $ 0 اصطلاح التسمية المستخدم في البرمجة النصية shell لـ UNIX لنفس الغرض.
  • $* - وسيطات سطر الأوامر في مصفوفة يُشار إليها بعلامة $ * (علامة الدولار وعلامة النجمة). على سبيل المثال ، إذا كنت ستركض ./script.rb arg1 arg2، ثم $ * ستكون مساوية لـ ٪ w {arg1 arg2}. هذا يعادل الخاص ARGV صفيف ولديه اسم وصفي أقل ، لذلك نادرا ما يستخدم.
  • $$ - معرف عملية المترجم ، يشار إليه بعلامة $$ (علامتان دولارتان). غالبًا ما تكون معرفة معرف العملية الخاصة بالمستخدم مفيدة في برامج الخدمة (التي تعمل في الخلفية ، غير مرتبطة بأي محطة طرفية) أو خدمات النظام. ومع ذلك ، فإن هذا يصبح أكثر تعقيدًا قليلاً عند مشاركة الخيوط ، لذا كن حذرًا من استخدامها بشكل أعمى.
  • $ / و $ \ - هذه هي فواصل سجل المدخلات والمخرجات. عندما تقرأ الأشياء باستخدام يحصل على وطباعتها باستخدام يضع، تستخدم هذه المعلومات لمعرفة متى تمت قراءة "سجل" كامل ، أو ما يجب طباعته بين سجلات متعددة. بشكل افتراضي ، يجب أن تكون هذه هي أحرف السطر الجديد. ولكن بما أن هذه تؤثر على سلوك جميع كائنات IO ، نادرًا ما يتم استخدامها ، على الإطلاق. قد تراها في نصوص أصغر حيث لا يمثل كسر قواعد التغليف مشكلة.
  • $? - تنفيذ حالة الخروج لآخر عملية تابعة. من بين جميع المتغيرات المدرجة هنا ، ربما يكون هذا هو الأكثر فائدة. والسبب في ذلك بسيط: لا يمكنك الحصول على حالة الخروج من العمليات الفرعية بقيمتها المرتجعة من النظام طريقة ، صحيحة أو خاطئة فقط. إذا كان يجب عليك معرفة القيمة المرجعة الفعلية للعملية الفرعية ، فأنت بحاجة إلى استخدام هذا المتغير العام الخاص. مرة أخرى ، يتم أخذ اسم هذا المتغير من قذائف UNIX.
  • $_ - السلسلة الأخيرة التي قرأها يحصل على. قد يكون هذا المتغير نقطة إرباك لأولئك الذين يأتون إلى روبي من بيرل. في بيرل ، متغير $ _ تعني شيئًا مشابهًا ، لكنه مختلف تمامًا. في بيرل ، $_ يحمل قيمة البيان الأخير وفي روبي يحمل السلسلة التي أرجعتها السابقة يحصل على استدعاء. استخدامهم مشابه ، لكن ما يمتلكونه مختلف تمامًا. لا ترى هذا المتغير غالبًا أيضًا (فكر في الأمر ، نادرًا ما ترى أيًا من هذه المتغيرات) ، ولكن قد تراها في برامج Ruby القصيرة جدًا التي تعالج النص.

باختصار ، نادرًا ما سترى المتغيرات العالمية. غالبًا ما يكون شكلها سيئًا (و "غير روبي") ومفيد حقًا فقط في النصوص الصغيرة جدًا ، حيث يمكن تقدير التأثير الكامل لاستخدامها بشكل كامل. هناك عدد قليل من المتغيرات العالمية الخاصة التي يمكن استخدامها ، ولكن في الغالب لا يتم استخدامها. لا تحتاج حقًا إلى معرفة الكثير عن المتغيرات العالمية لفهم معظم برامج Ruby ، ​​ولكن يجب أن تعرف على الأقل أنها موجودة.

instagram story viewer