كيفية استخدام الهدف-C لكتابة DSL جميلة؟

الكاتب | Zangcheng وي

تحرير | الرماد

التحرير

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

مثل هذا التعبير لمناطق محددة، دعونا DSL (مجال معين لغة)، توضح هذه الورقة كيفية تنفيذ DSL المكالمات بالسلاسل.

تحقيق المكالمات بالسلاسل

نعطي مثالا ملموسا، ونحن نستخدم هذه التعبيرات لخلق UIView سلسلة، تعيين إطاره، backgroundColor، وأضاف أن أحد الوالدين عرض.

لأبسط الهدف-C (قبل ظهور كتلة نظام التشغيل iOS4)، إذا كنت ترغب في تحقيق المكالمات بالسلاسل، ويمكن أن ننظر فقط من هذا القبيل:

مع كتلة، يمكن أن نضع بين قوسين تم تغيير الصيغة في شكل جملة نقطة

كما يمكن أن يرى، وسلسلة قواعد اللغة الدلالي هو واضح، وهذا الأخير هو تركيب أكثر إحكاما، دعونا ننظر من زاويتين لتحقيق هذا الأخير.

1. من قواعد المنظور

المكالمات بالسلاسل لا يمكن أن يتحقق بطريقتين:

1. خاصية تستخدم لحفظ المعلومات في قيمة الإرجاع للأسلوب

على سبيل المثال، .right. أعلى .bottom شابه في البناء .left، سيعود مثيل من فئة دعوة MASConstraintMaker، الذي يسار / يمين / أعلى / أسفل المعلومات إلى سمات تخزين كل مكالمة.

وكمثال آخر، فإن الأسلوب أسلوب .notTo Expecta بإرجاع مثيل EXPExpect الطبقة، التي لديها BOOL self.negative الخاصية ما إذا كان لتسجيل .notTo المكالمات،

وكمثال آخر، فإن هذه الطريقة. مع تجسيد، يمكن أن نعود النفس مباشرة.

2. كتلة نوع السمة تقبل المعلمات

الماسونية في مثل .offset (15) طريقة لتلقي CGFloat كما يمكن إضافة معلمة في نوع كتلة سمات الطبقة MASConstraintMaker:

يمكن إضافة أمثلة من هذا القبيل .position (س، ص) لسمة فئة في ما يلي:

عندما يدعو .position طريقة (س، ص)، ويؤدي هذا بلوك، وعاد المثال ViewMaker تضمن المكالمات إلى المضي قدما بالسلاسل.

2. من وجهة نظر الدلالي

من المستوى الدلالي، والحاجة إلى تحديد ما هو جسيم، وهو ضرورة قبول المعلمات. من أجل ضمان المكالمات بالسلاسل لاستكمال، والنظر في ما مرت، ما عاد.

أو من حيث المثال أعلاه:

خطوة خطوة نظرة على هذا DSL هي الحاجة إلى وصف ضرورة التعبير إلى الوك بدأت intoView قبالة. قبل نهاية لغة intoView، لدينا على درجة معينة من تعديل UIView، استخدم positionsizebgColor هذه.

هنا كنا أربعة من وجهة نظر، وكيفية تحقيق مثل هذا التعبير:

(1) الكائن

في AllocA (UIView) دلالات، توصلنا الكائن هو UIVIew. منذ تقرير UIView هي المرة قطع، لذلك نحن بحاجة إلى خلق طبقة وسطى في intoView لتوفير جميع الشروط وسيطة، وهنا نستخدم الدرجة ViewMaker.

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

(2) الجسيمات

في كثير من الحالات، وذلك للسماح للنظرة تركيب DSL أكثر تماسكا، ونحن بحاجة الى بعض المساعدة لالجسيمات، مثل البناء داخل make.top.equalTo (superview.mas_top). مع .offset (padding.top) مع عبارة من هذا القبيل جسيم.

وهذه الجسيمات وقواعد اللغة التي تعلمناها، وعادة ما يكون تأثير لا العملي، فإنه يمكن ببساطة العودة النفس.

علما بأن عودة نفسك، لا توجد وسيلة لمستخدمي المحطة تستمر في يسمون أنفسهم .with.with.with، من أجل تجنب هذه الحالة، يمكنك إنشاء فئة جديدة، كل فئة لديها التسلسل الهرمي الخاص حيث الطرق لتجنب يدعو الحراري .

وهذا ما يمنع بشكل فعال، .with.with.with هذا النحو. ولكن في الواقع، علينا أن نكون على أساس الحاجة الحقيقية لتطوير واستخدام مستخدمي DSL من أجل أفضل معبرة، لذلك .with.with.with كود لا الكتابة، مثل هذه التدابير الوقائية هو قليلا لا لزوم لها.

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

ومع ذلك، من أجل تبسيط المادة، ونحن نستخدم السابق، على حد سواء. مع النفس العودة إلى مواصلة ما يلي:

(3) جزء التعديل - عزوي

مثل هذه الأمثلة هي عزوي في قسم positionsizebgColor، المتعلقة UIView، تنسب إلى الوضع على سبيل المثال ViewMaker، من أجل التعبير عن الدعم لسلسلة، لذلك عندما تنفذ، وسوف تستمر في العودة النفس.

ونحن نحاول لتحقيق التالي:

(4) في نهاية الكلمة

"نهاية كلمة" هذا هو حقا قواعد اللغة الحديثة التي لا يمكن العثور على العلاقة المقابلة، ولكن في DSL، هذه الفترة هي ذات أهمية خاصة. أمثلة ViewMaker البداية وحتى النهاية لجمع الكثير من التعديلات، وكان آخر من حاجة للتعبير عن الكلمات تنتج النتيجة النهائية، ودعا هنا "نهاية الكلمة." على سبيل المثال، في Expecta هذه المكتبة مفتوحة المصدر التي تساوي السلوك الحقيقي من الوقت، لوnotTo لن تؤدي حقا السلوك.

في مثالنا، ونهاية الكلمة .intoView (aSuperViwe) لا يمكن أن يتحقق:

وبهذه الطريقة، وكتب في نهاية الكلمة.

ملخص رمز النهائي:

كتب في الماضي

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

انها بيضة

في الواقع، واصل المطورين لتحسين من أجل أن تنمو لتصبح على درجة الماجستير الحقيقية دانيال، يجب أن تكون رؤيتهم فوق متطلبات العمل، وتبسيط تعزيز المهارات الأساسية وتعزيز فهم للغة وأدوات مستوى من أجل تحسين كفاءة تطوير وتحسين مستوى المهارة.

نحن نستعد أكثر متعة بالنسبة لك، وتجعلك أكثر فعالية في دائرة الرقابة الداخلية العليا السحر الأسود الهجومية والدفاعية تقنية، معهد ستاركي (StuQ) دائرة الرقابة الداخلية دعوة خاصة خبراء فنيين كبار Zangcheng وي فتح جيدا - تدريب المعلمين "IOS عبة، السحر الاسود" بالطبع، 6 أسابيع 12 ساعة كفاءة يجب أن دائرة الرقابة الداخلية تحصل لدينا الراقية السحر الأسود تقنية الهجومية والدفاعية، وتبقى لكم من المطورين العاديين تأتي تدريجيا، انظر لغة مختلفة، ويشعر التنمية ليست هي نفسها!

المعلمين المتحدث: Zangcheng وى، المجموعة الأمريكية الخبراء الفنيين دائرة الرقابة الداخلية التعليق العام، محاضر يبرمها

فترات الدرجة: 6 أسابيع 12 ساعة نظام التعلم

شكل الطبقة: تكبير دروس الفيديو الحية

سعر الدورة: 1599 يوان

الموعد النهائي للتقديم: 2 يو 10 ري (Zhouwu) 18:00

"اسم المجموعة" نهائيات، قسمت 16 فريقا لأول مرة، وانغ للحد من المصدر هو ضرب المشهد

عذرا! "سكوير سبونجبوب" مرض التصلب الضموري العضلي الجانبي لأن الأب مات! كان المحيطات لإنشاء "كنز الاسفنجة

"واحد طعم الدموع،" أصدر نداء مستند في الاعتبار Xiaotong وقت متأخر من الليل، وعلى الفور قال Tucao كان النفاق

كيف تصمم خدمات مصغرة أكثر موثوقية من منظور الأعمال والمنصة؟

وضعت على نظرة جديدة من 360 N7 برو، لا تزال فعالة من حيث التكلفة

"المخملية الحمراء"، "حصة" مشاهد الألبوم 190322 RV تحديثات الخرائط يمكن أن يكون الحلو الأحمر الملح فاتنة لا تفوت

فيلم "التنين الكرة سوبر" مقطورة جديدة وو كونغ تحولت المعركة الجليد شن حرب دايتشي ميورا اللعب

باي لعبت لها الشهير، زوج ثري دائما برفقته حول الحميمة، البالغ من العمر 64 عاما وهو يرتدي اللباس الأحمر في حالة معنوية عالية

غير التخصصات في الكلية، لعبت فقط عمل، أصبحت آخر "الكنز فتاة" بعد الربيع والصيف

"بيج الاحتفال خنزير" صدر أول "طفل لطيف" ملصق الفيلم من مجموعة سلسلة الرسوم المتحركة الجديد

"بحر الملك" في شباك التذاكر كسر 700 مليون، وفي الوقت نفسه أنها تلقت خمس نقاط تتزايد أيضا عن قلقها الأخدود

زراعة الحقول مع ابنه؟ فوك زوج غني حقا نظيفة!