الاختزال في روبي، Artoo.io
سؤال
أبحث عن تفسير لما يحدث في الجزء العلوي artoo.io الروبوتات.يوجد إعلان في أعلى هذا المثال باستخدام برنامج تشغيل لوحة المفاتيح:
require 'artoo'
connection :keyboard, adaptor: :keyboard
device :keyboard, driver: :keyboard, connection: :keyboard
يبدو أنه تم عرض بعض الصيغ المختصرة/البديلة، وأود الحصول على شرح لهذا الاختصار.أنا أفهم بناء جملة التجزئة البديل: :adapter => :keyboard
.
ما الذي يحدث في هذين السطرين الأخيرين من التعليمات البرمجية أعلاه؟ما هو connection
؟هل هو فئة في الداخل artoo
التي يتم تهيئة؟لماذا لا يوجد new
؟أين :keyboard
يأتي من؟إذا كان هناك بناء جملة بديل يمثل العلاقات بشكل أكثر وضوحًا، فهل يمكنك إظهار ذلك أيضًا؟
المحلول
هذا سؤال عظيم.قد تكون نسخة مكررة ولكني لم أتمكن من العثور على واحدة وهذا هو الأمر الصعب بالنسبة للمبرمجين الأذكياء الجدد في روبي.
أولا بالنسبة لسؤالك:ما هو connection
?
إنها استدعاء الطريقة.في بعض الحالات قد يكون من الصعب معرفة ما هي الطريقة وما هو المتغير، لأن ذلك يعتمد فقط على كيفية تعريفهما.ولكن في هذه الحالة فمن الواضح ل connection
لديه المعلمات بعد ذلك.في روبي، يمكن استدعاء الأسلوب مثل هذا:
foo
في هذه الحالة، فهي طريقة لا تأخذ أي معلمات.أو يمكن أن يبدو مثل هذا:
foo 1, 2, 3
هذه طريقة ذات ثلاث معلمات.أو يمكن أن يبدو مثل هذا:
foo(1, 2, 3)
هذه هي نفس الطريقة، ولكن مع بناء جملة مختلف قليلاً (وهو مألوف أكثر لدى الأشخاص الذين لديهم تجارب في لغات محاكاة لغة C مثل c، وC++، وJava، وJavascript، وC#، وما إلى ذلك...)
لذلك عندما ترى المعلمات مدرجة بعد كلمة مجردة، مع عدم وجود عوامل تشغيل بينها، فهذه علامة أكيدة على أنها استدعاء الأسلوب.
الآن لتقسيم التعليمات البرمجية الخاصة بك بالكامل.
require 'artoo'
هذا من الناحية الفنية استدعاء الأسلوب.أنت تتصل بـ require
الطريقة وتمرير معلمة واحدة من السلسلة الحرفية 'artoo'
.كما قد تعرف، require
يقوم بتحميل ملف روبي خارجي في الملف الحالي.
connection :keyboard, adaptor: :keyboard
هذه طريقة استدعاء مع البعض التجميل اللغوى:
أنت تعرف ذلك على الفور connection
هو استدعاء الأسلوب لأنه يحتوي على معلمات بعده (أيلا يوجد عامل بين connection
وما بعده).ولكن ما المعلمات؟
:keyboard
:هو رمز, ، وهو ما يعادل روبي ل سلسلة المتدرب.
adaptor: :keyboard
هو التجزئة.
لدى روبي صيغتي تجزئة أساسيتين:
{key => value}
أين key
و value
هي أي كائنات، أو:
{key: value}
أين key
هو رمز حرفي و value
هو أي كائن.أيضًا، للحفاظ على نظافة التعليمات البرمجية، عند تمرير التجزئة باسم آخر معلمة لطريقة ما، يمكنك تركها {
و }
لأنه لا لبس فيه.ينتهي الأمر بإعطائك استدعاء أسلوب نظيف "معلمة مسماة":
do_something_to my_person, kindness: 10, aggressiveness: 2
في الكود الخاص بك:
connection :keyboard, adaptor: :keyboard
لديك بناء جملة التجزئة البديل (مفاتيح الرموز) مع {
و }
متروك مهمل.السطر بأكمله يعادل 100٪:
connection(:keyboard, {:adaptor => :keyboard})
سطرك الأخير:
device :keyboard, driver: :keyboard, connection: :keyboard
إنه الشيء نفسه.أي ما يعادل:
device(:keyboard, {:driver => :keyboard, :connection => :keyboard})
يبدو أجمل (بمجرد أن تعتاد عليه).
نصائح أخرى
في المثال الخاص بك، connection
و device
هي الأساليب.ال adapter: :keyboard
, driver: :keyboard
و :connection: :keyboard
البتات هي معلمات يتم تمريرها كتجزئة لتلك الأساليب.لا يتم تمرير المعلمات الأولى التي تم تمريرها إلى الاتصال () والجهاز () في عملية تجزئة.
يمكن إعادة كتابة نفس الكود على النحو التالي:
connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }