स्टाइल बनाम मॉडिफ़ायर

स्टाइल, डिज़ाइन के हिसाब से मॉडिफ़ायर से अलग होते हैं. स्टाइल, मॉडिफ़ायर की जगह नहीं लेते. इसके बजाय, दोनों सिस्टम अलग-अलग लक्ष्यों के साथ काम करते हैं. अंदरूनी तौर पर, स्टाइल एक मॉडिफ़ायर होता है. स्टाइल की मदद से मॉडिफ़ायर के सभी काम किए जा सकते हैं. हालांकि, मॉडिफ़ायर की सभी सुविधाएं स्टाइल में उपलब्ध नहीं होतीं.

यहां स्टाइल और मॉडिफ़ायर की तुलना की गई है:

सुविधा मॉडिफ़ायर स्टाइल
मुख्य लक्ष्य बिहेवियर, सिमैंटिक्स, और कॉम्प्लेक्स लेआउट तय करना. मॉडिफ़ायर, किसी खास कंपोज़ेबल के लिए, अलग-अलग एलिमेंट को तुरंत बदल देते हैं. साथ ही, ये थीम से नीचे की ओर नहीं आते. विज़ुअल अपीयरेंस, अलग-अलग आइटम का साइज़, और थीम की प्रॉपर्टी तय करना. स्टाइल, थीम लेवल पर काम करते हैं और इन्हें कॉम्पोनेंट लेवल पर बदला जा सकता है. ये नीचे की ओर आते हैं और अलग-अलग कंपोज़ेबल पर स्टाइलिंग लागू करते हैं.
लॉजिक ऐडिटिव - मॉडिफ़ायर मिलकर एक नया नतीजा बनाते हैं. बदला जा सकने वाला - स्टाइल में सेट की गई आखिरी प्रॉपर्टी काम करती है. स्टाइल, प्रॉपर्टी की एक लेयर के तौर पर काम करते हैं. ये तय की गई प्राथमिकता के क्रम के हिसाब से एक-दूसरे को बदल देते हैं.
थीमिंग इन्हें किसी थीम में शामिल करना मुश्किल होता है. आम तौर पर, इनका इस्तेमाल अलग-अलग किया जाता है. स्टाइल को थीम में शामिल किया जा सकता है. ये CompositionLocal को ऐक्सेस कर सकते हैं. साथ ही, इन्हें एक बार तय करके, अलग-अलग कॉम्पोनेंट में इस्तेमाल किया जा सकता है.
परफ़ॉर्मेंस अपडेट के लिए, Compose के तीनों फ़ेज़ की ज़रूरत होती है: कंपोज़िशन, लेआउट, और ड्रॉ. मॉडिफ़ायर के बेहतर ऐनिमेशन परफ़ॉर्मेंस के लिए, अक्सर लैम्डा-आधारित वर्शन लिखने की ज़रूरत होती है. यह कंपोज़िशन फ़ेज़ को स्किप कर देता है. यह सिर्फ़ लेआउट और ड्रॉ फ़ेज़ में काम करता है. इससे रीकंपोज़िशन कम हो जाते हैं. इसके लिए, कम ऑब्जेक्ट एलोकेशन की ज़रूरत होती है.
ऐनिमेशन इसके लिए, animate*AsState जैसे अलग-अलग ऐनिमेशन प्रिमिटिव का इस्तेमाल करना ज़रूरी है इसमें animate { } API शामिल है. यह कुछ ऐनिमेशन को आपके लिए हैंडल करता है.

मॉडिफ़ायर की सीमाएं

Compose के मौजूदा लैंडस्केप में, मॉडिफ़ायर के कई फ़ायदे हैं. हालांकि, स्टाइल, मॉडिफ़ायर की कुछ सीमाओं को दूर करते हैं. इनके बारे में यहां बताया गया है:

  • मॉडिफ़ायर आम तौर पर, कंपोज़िशन फ़ेज़ में बनाए जाते हैं. अपडेट की वजह से, कंपोज़िशन, लेआउट, और ड्रॉ को पूरी तरह से फिर से चलाया जा सकता है. ऐसा तब भी हो सकता है, जब रंग जैसे छोटे-मोटे विज़ुअल बदलाव किए गए हों. हालांकि, ऐसा तब नहीं होता, जब लैम्डा-आधारित मॉडिफ़ायर बनाए जाते हैं.
  • कंडीशनल मॉडिफ़ायर के लिए, फ़्लूएंट चेन में, if-else लॉजिक की ज़रूरत होती है. इन्हें ऐनिमेट करने के लिए, मैन्युअल स्टेट बॉयलरप्लेट की ज़रूरत होती है. साथ ही, इनमें बेहतर परफ़ॉर्मेंस वाला "ऑटो-ऐनिमेट" मैकेनिज़्म नहीं होता.
  • मॉडिफ़ायर, रीप्लेस करने के बजाय स्टैक होते हैं. किसी कॉम्पोनेंट के डिफ़ॉल्ट बॉर्डर को बदला नहीं जा सकता. इसके ऊपर सिर्फ़ दूसरा बॉर्डर बनाया जा सकता है.
  • मॉडिफ़ायर को ग्लोबल थीम में शामिल करना मुश्किल होता है. इसलिए, थीम में आम तौर पर, रीयूज़ किए जा सकने वाले मॉडिफ़ायर कॉन्फ़िगरेशन के बजाय, रॉ वैल्यू सेव की जाती हैं.

स्टाइल की सीमाएं

स्टाइल, मॉडिफ़ायर की कुछ कमियों को दूर कर सकते हैं. हालांकि, इनकी भी कुछ सीमाएं हैं. इससे पता चलता है कि ये मॉडिफ़ायर की जगह पूरी तरह से नहीं ले सकते:

  • स्टाइल, खास तरह के मॉडिफ़ायर होते हैं. मॉडिफ़ायर, स्टाइल के सभी काम कर सकते हैं. हालांकि, स्टाइल, मॉडिफ़ायर के सभी काम नहीं कर सकते. इसलिए, स्टाइल, मॉडिफ़ायर के साथ काम कर सकते हैं, लेकिन उनकी जगह नहीं ले सकते.
  • स्टाइल, सिर्फ़ विज़ुअल कॉन्फ़िगरेशन (बैकग्राउंड, पैडिंग, बॉर्डर) तक सीमित होते हैं. ये क्लिक लॉजिक, जेस्चर की पहचान या ऐक्सेसिबिलिटी सिमैंटिक्स जैसे बिहेवियर को हैंडल नहीं कर सकते.
  • किसी स्टाइल को उसकी फ़ाइनल स्टेट में रिज़ॉल्व करना, किसी एक मॉडिफ़ायर को लागू करने से ज़्यादा महंगा होता है. सिस्टम को, सभी संभावित प्रॉपर्टी वैल्यू वाला डेटा स्ट्रक्चर जनरेट करना होता है. साथ ही, इनहेरिट की गई प्रॉपर्टी की लुकअप से यह और भी मुश्किल हो जाता है.

मॉडिफ़ायर के बजाय स्टाइल का इस्तेमाल कब करें

स्टाइल का इस्तेमाल करने का विकल्प, आपके ऐप्लिकेशन और इस्तेमाल के उदाहरणों पर निर्भर करता है. हालांकि, यहां दिए गए दिशा-निर्देशों से यह तय करने में मदद मिलती है कि मॉडिफ़ायर के बजाय स्टाइल का इस्तेमाल कब करना चाहिए:

  • थीम-वाइड कंसिस्टेंसी पाने के लिए: स्टाइल को ग्लोबल थीम में "शामिल" करने के लिए डिज़ाइन किया गया है. हर कॉम्पोनेंट को बार-बार मॉडिफ़ायर पास करने के बजाय, अपनी थीम में एक स्टाइल तय करके, पूरे ऐप्लिकेशन में एक जैसा लुक बनाया जा सकता है.
  • बार-बार ऐनिमेशन दिखाने पर: स्टाइल, लेआउट और ड्रॉ फ़ेज़ के दौरान काम करते हैं. इससे, रंग या स्केल जैसी प्रॉपर्टी को ऐनिमेट किया जा सकता है. साथ ही, कंपोज़िशन फ़ेज़ को पूरी तरह से स्किप किया जा सकता है. इससे, परफ़ॉर्मेंस ओवरहेड काफ़ी कम हो जाता है. विज़ुअल प्रॉपर्टी ऐनिमेशन दिखाने के लिए, मॉडिफ़ायर के बजाय स्टाइल का इस्तेमाल करें.
  • बदलना बनाम स्टैक करना: डिफ़ॉल्ट प्रॉपर्टी को बदलने के लिए, स्टाइल का इस्तेमाल करें. मॉडिफ़ायर, ऐडिटिव होते हैं (बॉर्डर जोड़ने से दूसरा बॉर्डर स्टैक हो जाता है). वहीं, स्टाइल "लास्ट-राइट-विंस" लॉजिक का इस्तेमाल करते हैं. इससे, विज़ुअल क्लटर के बिना, बैकग्राउंड या पैडिंग को बदलना आसान हो जाता है.
  • मटीरियल कॉम्पोनेंट को पसंद के मुताबिक बनाना: अगर कोई मटीरियल कॉम्पोनेंट, स्टाइल पैरामीटर उपलब्ध कराता है, तो इसे पसंद के मुताबिक बनाने के लिए, यह तरीका सुझाया जाता है. इन स्टाइल की मदद से, कंपोज़ेबल के इंटरनल स्ट्रक्चर में मौजूद खास प्रॉपर्टी को ऐक्सेस और उनमें बदलाव किया जा सकता है. ऐसा न करने पर, इन्हें ऐक्सेस नहीं किया जा सकता.