تختلف الأنماط عن المعدِّلات حسب التصميم. لا تحلّ الأنماط محلّ المعدِّلات، بل يتواجد النظامان معًا لتحقيق أهداف مختلفة، فالنمط هو معدِّل داخليًا. يمكنك إجراء كل ما يمكن أن تفعله "الأنماط" باستخدام المعدِّلات، ولكن لا تتوفّر كل الوظائف في المعدِّلات ضمن "الأنماط".
في ما يلي مقارنة بين "الأنماط" و"المعدّلات":
| الميزة | مفاتيح التعديل | الأنماط |
|---|---|---|
| الهدف الأساسي | تحديد السلوكيات والدلالات والتنسيقات المعقّدة تعدّل أدوات التعديل العناصر الفردية أثناء التنفيذ لعنصر قابل للإنشاء معيّن ولا تنتقل من المظهر. | تحديد المظهر المرئي وحجم السلعة الفردية والسمات القابلة للتخصيص تعمل الأنماط على مستوى المظهر ويمكن إعادة كتابتها على مستوى المكوّن. تتسرّب هذه القيم إلى الأسفل ويتم تطبيق الأنماط على عناصر مختلفة قابلة للإنشاء. |
| المنطق | إضافي: يتم دمج المعدِّلات معًا لتكوين نتيجة جديدة. | قابلة للكتابة فوقها: تفوز السمة الأخيرة التي تم ضبطها في "النمط". تعمل الأنماط كطبقة واحدة من السمات التي تحلّ محلّ بعضها البعض استنادًا إلى تسلسل أسبقية محدّد. |
| تطبيق السمات | يصعب تحويلها إلى سمة، ويتم استخدامها عادةً بشكل فردي. | بشكلٍ عام، يمكن تطبيق المظاهر على "الأنماط" (يمكنها الوصول إلى CompositionLocal) ويمكن تحديدها مرة واحدة واستخدامها في جميع المكوّنات. |
| الأداء | غالبًا ما تتطلّب التحديثات جميع مراحل Compose الثلاث: الإنشاء والتنسيق والرسم. لتحقيق أداء جيد للرسوم المتحركة الخاصة بالمعدِّلات، يجب غالبًا كتابة إصدارات تستند إلى تعبيرات lambda. | تتخطّى مرحلة الإنشاء، وتكون نشطة فقط في مرحلتَي التخطيط والرسم، ما يقلّل من عمليات إعادة الإنشاء. تتطلّب تخصيصًا أقل للعناصر. |
| الصور المتحركة | يتطلّب استخدام عناصر أساسية منفصلة للصور المتحركة، مثل animate*AsState |
ميزات مضمَّنة في واجهة برمجة التطبيقات animate { } تتعامل مع بعض الرسوم المتحركة نيابةً عنك. |
حدود المعدِّلات
تقدّم المعدِّلات العديد من المزايا في بيئة Compose الحالية. ومع ذلك، تعالج "الأنماط" بعض القيود المفروضة على المعدِّلات، كما هو موضّح في القائمة التالية:
- يتم عادةً إنشاء المعدِّلات في مرحلة "التركيب". يمكن أن تؤدي التحديثات إلى إعادة تشغيل كاملة لعمليات Composition وLayout وDraw، حتى عند إجراء تغييرات مرئية بسيطة مثل اللون، ما لم تنشئ أدوات تعديل مستندة إلى تعبيرات lambda.
- تتطلّب المعدّلات الشرطية منطقًا معطّلاً من النوع if-else ضمن السلاسل السلسة. ويتطلّب تحريكها رمزًا معياريًا يدويًا للحالة، كما أنّها تفتقر إلى آلية "التحريك التلقائي" عالية الأداء.
- تتراكم المعدّلات بدلاً من أن تحلّ محل بعضها. لا يمكنك تجاهل الحدود التلقائية لأحد المكوّنات، بل يمكنك فقط رسم حدود ثانية فوقها.
- يصعب استخلاص المعدِّلات في مواضيع عالمية. نتيجةً لذلك، تخزّن السمات عادةً القيم الأولية بدلاً من إعدادات المعدِّلات القابلة لإعادة الاستخدام.
القيود المفروضة على "الأنماط"
على الرغم من أنّ "الأنماط" يمكن أن تسدّ بعض الثغرات التي تتضمّنها "المعدّلات"، إلا أنّها تتضمّن أيضًا بعض القيود التي توضّح أنّه لا يمكنها أن تحلّ محلّ "المعدّلات" تمامًا:
- الأنماط هي معدِّلات متخصّصة. مع أنّ أداة التعديل يمكنها تنفيذ أي إجراء يمكن تنفيذه باستخدام "نمط"، لا يمكن تنفيذ العكس. نتيجةً لذلك، يمكن أن تكمل "الأنماط" المعدِّلات، ولكن لا يمكن أن تحلّ محلّها.
- تقتصر الأنماط على الإعداد المرئي (الخلفيات والحشو والحدود). ولا يمكنها التعامل مع سلوكيات مثل منطق النقر أو رصد الإيماءات أو دلالات تسهيل الاستخدام.
- إنّ تحويل نمط إلى حالته النهائية أكثر تكلفة من تطبيق معدِّل واحد. يجب أن ينشئ النظام بنية بيانات تحتوي على جميع قيم السمات المحتملة، ويؤدي البحث عن السمات الموروثة إلى زيادة تعقيد هذه العملية.
حالات استخدام "الأنماط" بدلاً من "المعدّلات"
مع أنّ قرار استخدام الأنماط يعتمد بشكل كبير على تطبيقك وحالات الاستخدام، إلا أنّ الإرشادات التالية تساعد في تحديد الوقت المناسب لتفضيل نمط على معدِّل:
- لتحقيق الاتساق على مستوى المظهر: تم تصميم الأنماط ليتم "نقلها" إلى مظهر عام. بدلاً من تمرير المعدِّلات المتكرّرة إلى كل مكوّن، يمكنك تحديد نمط واحد في المظهر لإنشاء مظهر موحّد في جميع أنحاء التطبيق.
- عند تنفيذ رسوم متحركة متكررة: يتم تقييم الأنماط خلال مرحلتَي "التخطيط" و"الرسم"، ما يتيح تحريك خصائص مثل اللون أو المقياس مع تخطّي مرحلة "التركيب" بالكامل. ويقلّل ذلك بشكل كبير من تكلفة الأداء. استخدِم نمطًا بدلاً من أداة تعديل عند إنشاء رسوم متحركة للعناصر المرئية.
- الاستبدال مقابل التجميع: استخدِم "الأنماط" عندما تحتاج إلى استبدال خاصية تلقائية. المعدِّلات هي إضافية (إضافة حدّ يضيف حدًّا ثانيًا)، بينما تستخدم "الأنماط" منطق "الكتابة الأخيرة هي الأهم"، ما يسهّل استبدال الخلفيات أو المساحة المتروكة بدون تشويش مرئي.
- تخصيص مكوّنات Material: إذا كان أحد مكوّنات Material يوفّر مَعلمة Style، يكون هذا هو الأسلوب المقترَح للتخصيص. تتيح لك هذه الأنماط الوصول إلى خصائص معيّنة وتعديلها ضمن البنية الداخلية للعنصر القابل للإنشاء، والتي قد يتعذّر الوصول إليها بطريقة أخرى.