স্টাইল বনাম মডিফায়ার

গঠনগতভাবেই স্টাইল এবং মডিফায়ার আলাদা। স্টাইল মডিফায়ারকে প্রতিস্থাপন করে না; বরং, এই দুটি সিস্টেম ভিন্ন ভিন্ন লক্ষ্য নিয়ে সহাবস্থান করে। অভ্যন্তরীণভাবে, একটি স্টাইল হলো একটি মডিফায়ার। স্টাইল যা যা করতে পারে, মডিফায়ার দিয়েও আপনি সেই সব কাজ করতে পারবেন, কিন্তু মডিফায়ারের সব কার্যকারিতা স্টাইলে পাওয়া যায় না।

নিম্নলিখিতটি হলো স্টাইল এবং মডিফায়ারের মধ্যে একটি তুলনা:

বৈশিষ্ট্য সংশোধক শৈলী
প্রাথমিক লক্ষ্য আচরণ, অর্থ এবং জটিল লেআউট সংজ্ঞায়িত করুন। মডিফায়ারগুলি একটি নির্দিষ্ট কম্পোজেবলের জন্য তাৎক্ষণিকভাবে স্বতন্ত্র উপাদানগুলিকে পরিবর্তন করে এবং থিম থেকে নিচে প্রভাব ফেলে না। ভিজ্যুয়াল চেহারা, প্রতিটি আইটেমের আকার এবং থিমযোগ্য বৈশিষ্ট্য নির্ধারণ করুন। স্টাইলগুলো থিম স্তরে কাজ করে এবং কম্পোনেন্ট স্তরে ওভাররাইট করা যায়। এগুলো ধাপে ধাপে বিভিন্ন কম্পোজেবল জুড়ে স্টাইলিং প্রয়োগ করে।
যুক্তি যোগাত্মক - সংশোধকগুলো একত্রিত হয়ে একটি নতুন ফলাফল গঠন করে। ওভাররাইটেবল – স্টাইলে সর্বশেষ সেট করা প্রপার্টিটিই কার্যকর হয়। স্টাইলগুলো প্রপার্টির একটি একক স্তর হিসেবে কাজ করে, যা একটি সংজ্ঞায়িত অগ্রাধিকার ক্রম অনুসারে একে অপরকে ওভাররাইড করে।
থিমিং কোনো একটি থিমের আওতায় আনা কঠিন, সাধারণত এককভাবে ব্যবহৃত হয়। ডিজাইন অনুযায়ী, স্টাইলগুলো থিমযোগ্য (এগুলো CompositionLocal অ্যাক্সেস করতে পারে) এবং একবার সংজ্ঞায়িত করে বিভিন্ন কম্পোনেন্টে ব্যবহার করা যায়।
কর্মক্ষমতা আপডেট করার জন্য প্রায়শই কম্পোজ-এর তিনটি ধাপেরই প্রয়োজন হয়: কম্পোজিশন, লেআউট এবং ড্র। মডিফায়ারগুলোর ভালো অ্যানিমেশন পারফরম্যান্স পেতে প্রায়শই ল্যাম্বডা-ভিত্তিক সংস্করণ লেখার প্রয়োজন পড়ে। কম্পোজিশন পর্যায় এড়িয়ে যায়, শুধু লেআউট এবং ড্র পর্যায়ে সক্রিয় থাকে, ফলে রিকম্পোজিশনের প্রয়োজন কমে যায়। এতে কম অবজেক্ট অ্যালোকেশনের প্রয়োজন হয়।
অ্যানিমেশন এর জন্য animate*AsState মতো আলাদা অ্যানিমেশন প্রিমিটিভ ব্যবহার করতে হয়। এতে বিল্ট-ইন animate { } API রয়েছে যা আপনার জন্য কিছু অ্যানিমেশন পরিচালনা করে।

মডিফায়ারের সীমাবদ্ধতা

বর্তমান কম্পোজ প্রেক্ষাপটে মডিফায়ারের অনেক সুবিধা রয়েছে। তবে, স্টাইলস মডিফায়ারের কিছু সীমাবদ্ধতা দূর করে, যা নিম্নলিখিত তালিকায় বর্ণনা করা হলো:

  • মডিফায়ারগুলো সাধারণত কম্পোজিশন পর্যায়ে তৈরি করা হয়। ল্যাম্বডা-ভিত্তিক মডিফায়ার তৈরি না করলে, রঙের মতো ছোটখাটো দৃশ্যমান পরিবর্তনের জন্যও আপডেটগুলো কম্পোজিশন, লেআউট এবং ড্র-কে সম্পূর্ণভাবে পুনরায় চালাতে বাধ্য করতে পারে।
  • ফ্লুয়েন্ট চেইনের মধ্যে কন্ডিশনাল মডিফায়ারগুলোর জন্য বিঘ্ন সৃষ্টিকারী if-else লজিকের প্রয়োজন হয়। এগুলোকে অ্যানিমেট করার জন্য ম্যানুয়াল স্টেট বয়লারপ্লেট কোড লিখতে হয় এবং এতে কোনো উচ্চ-পারফরম্যান্সের "অটো-অ্যানিমেট" মেকানিজমের অভাব রয়েছে।
  • মডিফায়ারগুলো প্রতিস্থাপন না করে একটির উপর আরেকটি যুক্ত হয়। আপনি কোনো কম্পোনেন্টের ডিফল্ট বর্ডারকে ওভাররাইড করতে পারবেন না; কেবল তার উপরে দ্বিতীয় আরেকটি আঁকতে পারবেন।
  • মডিফায়ারগুলোকে গ্লোবাল থিমে রূপ দেওয়া কঠিন। ফলে, থিমগুলো সাধারণত পুনঃব্যবহারযোগ্য মডিফায়ার কনফিগারেশনের পরিবর্তে সরাসরি মান সংরক্ষণ করে।

শৈলীর সীমাবদ্ধতা

যদিও স্টাইলগুলো মডিফায়ারের কিছু ঘাটতি পূরণ করতে পারে, তবুও সেগুলোর কিছু সীমাবদ্ধতাও রয়েছে, যা থেকে বোঝা যায় কেন সেগুলো মডিফায়ারকে পুরোপুরি প্রতিস্থাপন করতে পারে না:

  • স্টাইল হলো বিশেষায়িত মডিফায়ার। একটি মডিফায়ার স্টাইলের সমস্ত কাজ করতে পারলেও, এর বিপরীতটি সত্য নয়। ফলে, স্টাইল মডিফায়ারের পরিপূরক হতে পারে, কিন্তু তার বিকল্প হতে পারে না।
  • স্টাইল শুধুমাত্র ভিজ্যুয়াল কনফিগারেশনের (ব্যাকগ্রাউন্ড, প্যাডিং, বর্ডার) মধ্যেই সীমাবদ্ধ। এগুলি ক্লিক লজিক, জেসচার ডিটেকশন বা অ্যাক্সেসিবিলিটি সিম্যান্টিক্সের মতো আচরণগুলি পরিচালনা করতে পারে না।
  • একটি স্টাইলকে তার চূড়ান্ত অবস্থায় রূপ দেওয়া একটি একক মডিফায়ার প্রয়োগ করার চেয়ে বেশি ব্যয়বহুল । সিস্টেমকে সমস্ত সম্ভাব্য প্রপার্টি ভ্যালু সম্বলিত একটি ডেটা স্ট্রাকচার তৈরি করতে হয়, এবং ইনহেরিটেড প্রপার্টিগুলোর অনুসন্ধান এই প্রক্রিয়াটিকে আরও জটিল করে তোলে।

কখন মডিফায়ারের পরিবর্তে স্টাইল ব্যবহার করবেন

যদিও স্টাইল ব্যবহারের সিদ্ধান্ত মূলত আপনার অ্যাপ এবং ব্যবহারের ধরনের ওপর নির্ভর করে, নিম্নলিখিত নির্দেশিকাটি কখন মডিফায়ারের পরিবর্তে স্টাইল ব্যবহার করা উচিত তা নির্ধারণ করতে সাহায্য করে:

  • পুরো থিমে সামঞ্জস্য আনতে: স্টাইলগুলোকে একটি গ্লোবাল থিমে অন্তর্ভুক্ত করার জন্য ডিজাইন করা হয়েছে। প্রতিটি কম্পোনেন্টে একই ধরনের মডিফায়ার ব্যবহার করার পরিবর্তে, আপনি আপনার থিমে একটিমাত্র স্টাইল সংজ্ঞায়িত করে পুরো অ্যাপ জুড়ে একটি সমন্বিত রূপ তৈরি করতে পারেন।
  • ঘন ঘন অ্যানিমেশন করার সময়: স্টাইলগুলো লেআউট এবং ড্র ফেজে কার্যকর হয়, যার ফলে কম্পোজিশন ফেজকে পুরোপুরি এড়িয়ে গিয়েই রঙ বা স্কেলের মতো প্রপার্টিগুলোকে অ্যানিমেট করা যায়। এটি পারফরম্যান্স ওভারহেড উল্লেখযোগ্যভাবে কমিয়ে দেয়। ভিজ্যুয়াল প্রপার্টি অ্যানিমেশন করার সময় মডিফায়ারের পরিবর্তে স্টাইল ব্যবহার করুন।
  • ওভাররাইডিং বনাম স্ট্যাকিং: যখন কোনো ডিফল্ট প্রপার্টি প্রতিস্থাপন করার প্রয়োজন হয়, তখন স্টাইল ব্যবহার করুন। মডিফায়ারগুলো সংযোজনমূলক (একটি বর্ডার যোগ করলে তার উপর আরেকটি বর্ডার যুক্ত হয়), অন্যদিকে স্টাইল 'লাস্ট-রাইট-উইনস' লজিক ব্যবহার করে, যা কোনো রকম ভিজ্যুয়াল জঞ্জাল ছাড়াই ব্যাকগ্রাউন্ড বা প্যাডিং পরিবর্তন করা সহজ করে তোলে।
  • ম্যাটেরিয়াল কম্পোনেন্ট কাস্টমাইজ করা: যদি কোনো ম্যাটেরিয়াল কম্পোনেন্ট একটি স্টাইল প্যারামিটার প্রদান করে, তবে কাস্টমাইজেশনের জন্য এটিই প্রস্তাবিত পদ্ধতি। এই স্টাইলগুলো আপনাকে কম্পোজেবলের অভ্যন্তরীণ কাঠামোর মধ্যে থাকা নির্দিষ্ট প্রোপার্টিগুলো অ্যাক্সেস এবং পরিবর্তন করার সুযোগ দেয়, যা অন্যথায় অ্যাক্সেসযোগ্য নাও হতে পারে।