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