الأنماط في مقابل المعدِّلات

تختلف الأنماط عن المعدِّلات حسب التصميم. لا تحلّ الأنماط محلّ المعدِّلات، بل يتواجد النظامان معًا لتحقيق أهداف مختلفة، فالنمط هو معدِّل داخليًا. يمكنك إجراء كل ما يمكن أن تفعله "الأنماط" باستخدام المعدِّلات، ولكن لا تتوفّر كل الوظائف في المعدِّلات ضمن "الأنماط".

في ما يلي مقارنة بين "الأنماط" و"المعدّلات":

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

حدود المعدِّلات

تقدّم المعدِّلات العديد من المزايا في بيئة Compose الحالية. ومع ذلك، تعالج "الأنماط" بعض القيود المفروضة على المعدِّلات، كما هو موضّح في القائمة التالية:

  • يتم عادةً إنشاء المعدِّلات في مرحلة الإنشاء. يمكن أن تؤدي التحديثات إلى إعادة تشغيل كاملة لعمليات Composition وLayout وDraw، حتى عند إجراء تغييرات مرئية صغيرة مثل اللون، ما لم تنشئ أدوات تعديل مستندة إلى تعبيرات lambda.
  • تتطلّب المعدّلات الشرطية منطقًا معطّلاً من النوع if-else ضمن السلاسل السلسة. ويتطلّب تحريكها رمزًا معياريًا يدويًا للحالة، كما أنّها تفتقر إلى آلية "التحريك التلقائي" عالية الأداء.
  • تتراكم المعدّلات بدلاً من أن تحل محل بعضها البعض. لا يمكنك تجاهل الحدود التلقائية لأحد المكوّنات، بل يمكنك فقط رسم حدود ثانية فوقها.
  • من الصعب تلخيص المعدِّلات في مواضيع عامة. نتيجةً لذلك، تخزّن المظاهر عادةً القيم الأولية بدلاً من إعدادات المعدِّلات القابلة لإعادة الاستخدام.

القيود المفروضة على الأنماط

على الرغم من أنّ "الأنماط" يمكنها ملء بعض الفجوات التي تتضمّنها "المعدّلات"، إلا أنّها تتضمّن أيضًا بعض القيود التي توضّح أنّه لا يمكنها أن تحلّ محلّ "المعدّلات" بالكامل:

  • الأنماط هي معدِّلات متخصّصة. مع أنّ أداة التعديل يمكنها تنفيذ أي إجراء يمكن أن ينفّذه النمط، لا يمكن أن ينفّذ النمط أي إجراء يمكن أن تنفّذه أداة التعديل. نتيجةً لذلك، يمكن أن تكمل "الأنماط" أدوات التعديل، ولكن لا يمكن أن تحلّ محلّها.
  • تقتصر الأنماط على الإعداد المرئي (الخلفيات والحشو والحدود). ولا يمكنها التعامل مع سلوكيات مثل منطق النقر أو رصد الإيماءات أو دلالات تسهيل الاستخدام.
  • إنّ تحويل نمط إلى حالته النهائية أكثر تكلفة من تطبيق معدِّل واحد. يجب أن ينشئ النظام بنية بيانات تحتوي على جميع قيم السمات المحتملة، ويؤدي البحث عن السمات الموروثة إلى زيادة تعقيد هذه العملية.

حالات استخدام "الأنماط" بدلاً من "المعدّلات"

مع أنّ قرار استخدام "الأنماط" يعتمد بشكل كبير على تطبيقك وحالات الاستخدام، إلا أنّ الإرشادات التالية تساعد في تحديد الحالات التي يُفضّل فيها استخدام نمط بدلاً من معدِّل:

  • لتحقيق الاتساق على مستوى المظهر: تم تصميم الأنماط ليتم "نقلها" إلى مظهر عام. بدلاً من تمرير المعدِّلات المتكرّرة إلى كل مكوّن، يمكنك تحديد نمط واحد في المظهر لإنشاء مظهر موحّد في جميع أنحاء التطبيق.
  • عند تنفيذ رسوم متحركة متكررة: يتم تقييم الأنماط خلال مرحلتَي "التخطيط" و"الرسم"، ما يتيح تحريك خصائص مثل اللون أو المقياس مع تخطّي مرحلة "التركيب" بالكامل. ويقلّل ذلك بشكل كبير من تكلفة الأداء. استخدِم نمطًا بدلاً من أداة تعديل عند إنشاء رسوم متحركة للخصائص المرئية.
  • الاستبدال مقابل التجميع: استخدِم "الأنماط" عندما تحتاج إلى استبدال خاصية تلقائية. المعدّلات هي إضافية (إضافة حدّ يضيف حدًّا ثانيًا)، بينما تستخدم "الأنماط" منطق "الكتابة الأخيرة هي الأهم"، ما يسهّل استبدال الخلفيات أو المساحة المتروكة بدون تشويش مرئي.
  • تخصيص مكونات Material: إذا كان أحد مكونات Material يوفّر مَعلمة Style، يكون هذا هو الأسلوب المقترَح للتخصيص. تتيح لك هذه الأنماط الوصول إلى خصائص معيّنة وتعديلها ضمن البنية الداخلية للعنصر القابل للإنشاء، والتي قد يتعذّر الوصول إليها بطريقة أخرى.