রচনা প্রকারগুলিকে স্থিতিশীল বা অস্থির বলে বিবেচনা করে। একটি টাইপ স্থিতিশীল হয় যদি এটি অপরিবর্তনীয় হয়, অথবা যদি কম্পোজের পক্ষে এটির মান পুনর্গঠনের মধ্যে পরিবর্তিত হয়েছে কিনা তা জানা সম্ভব হয়। একটি টাইপ অস্থির হয় যদি রচনা করতে না পারে যে এর মান পুনর্গঠনের মধ্যে পরিবর্তিত হয়েছে কিনা।
কম্পোজ একটি কম্পোজেবলের প্যারামিটারের স্থায়িত্ব ব্যবহার করে তা নির্ধারণ করে যে এটি পুনর্গঠনের সময় কম্পোজেবলকে এড়িয়ে যেতে পারে কিনা:
- স্থিতিশীল পরামিতি: যদি একটি কম্পোজেবলের স্থিতিশীল পরামিতি থাকে যা পরিবর্তিত হয় নি, তবে রচনা এটি এড়িয়ে যায়।
- অস্থির পরামিতি: যদি একটি কম্পোজেবলের অস্থির পরামিতি থাকে, কম্পোজ সর্বদা এটিকে পুনরায় কম্পোজ করে যখন এটি কম্পোনেন্টের প্যারেন্টকে পুনরায় কম্পোজ করে।
যদি আপনার অ্যাপে অনেকগুলি অপ্রয়োজনীয়ভাবে অস্থির উপাদান থাকে যা কম্পোজ সর্বদা পুনঃকম্পোজ করে, আপনি পারফরম্যান্স সমস্যা এবং অন্যান্য সমস্যাগুলি লক্ষ্য করতে পারেন।
এই দস্তাবেজটি বিশদ বিবরণ দেয় কিভাবে আপনি কার্যক্ষমতা এবং সামগ্রিক ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে আপনার অ্যাপের স্থায়িত্ব বাড়াতে পারেন।
অপরিবর্তনীয় বস্তু
নিম্নলিখিত স্নিপেটগুলি স্থিতিশীলতা এবং পুনর্গঠনের পিছনে সাধারণ নীতিগুলি প্রদর্শন করে৷
Contact
ক্লাস একটি অপরিবর্তনীয় ডেটা ক্লাস। এর কারণ হল এর সমস্ত প্যারামিটারগুলি val
কীওয়ার্ড দিয়ে সংজ্ঞায়িত আদিম। একবার আপনি Contact
এর একটি উদাহরণ তৈরি করলে, আপনি বস্তুর বৈশিষ্ট্যের মান পরিবর্তন করতে পারবেন না। আপনি যদি এটি করার চেষ্টা করেন তবে আপনি একটি নতুন বস্তু তৈরি করবেন।
data class Contact(val name: String, val number: String)
ContactRow
কম্পোজেবলের Contact
টাইপের একটি প্যারামিটার রয়েছে।
@Composable
fun ContactRow(contact: Contact, modifier: Modifier = Modifier) {
var selected by remember { mutableStateOf(false) }
Row(modifier) {
ContactDetails(contact)
ToggleButton(selected, onToggled = { selected = !selected })
}
}
ব্যবহারকারী টগল বোতামে ক্লিক করলে এবং selected
অবস্থার পরিবর্তন হলে কী ঘটে তা বিবেচনা করুন:
- কম্পোজ মূল্যায়ন করে যে এটি
ContactRow
ভিতরে কোডটি পুনরায় রচনা করা উচিত কিনা। - এটি দেখায় যে
ContactDetails
এর জন্য একমাত্র যুক্তি হলContact
টাইপ। - যেহেতু
Contact
একটি অপরিবর্তনীয় ডেটা শ্রেণী, তাই রচনা নিশ্চিত যেContactDetails
জন্য কোনো আর্গুমেন্ট পরিবর্তিত হয়নি। - যেমন, রচনা
ContactDetails
এড়িয়ে যায় এবং এটি পুনরায় রচনা করে না। - অন্যদিকে,
ToggleButton
এর আর্গুমেন্ট পরিবর্তিত হয়েছে, এবং Compose সেই উপাদানটিকে পুনরায় কম্পোজ করে।
পরিবর্তনযোগ্য বস্তু
যদিও পূর্বের উদাহরণটি একটি অপরিবর্তনীয় বস্তু ব্যবহার করে, এটি একটি পরিবর্তনযোগ্য বস্তু তৈরি করা সম্ভব। নিম্নলিখিত স্নিপেট বিবেচনা করুন:
data class Contact(var name: String, var number: String)
যেহেতু Contact
এর প্রতিটি প্যারামিটার এখন একটি var
, তাই ক্লাসটি আর অপরিবর্তনীয় নয়। যদি এর বৈশিষ্ট্যগুলি পরিবর্তিত হয় তবে রচনাটি সচেতন হবে না। কারণ কম্পোজ শুধুমাত্র কম্পোজ স্টেট অবজেক্টের পরিবর্তনগুলি ট্র্যাক করে।
রচনা এই ধরনের একটি শ্রেণীকে অস্থির বলে মনে করে। কম্পোজ অস্থির ক্লাসের পুনর্গঠন এড়িয়ে যায় না। যেমন, যদি Contact
এইভাবে সংজ্ঞায়িত করা হয়, পূর্ববর্তী উদাহরণে ContactRow
যেকোন সময় selected
পরিবর্তিত হয়ে পুনরায় সংকলন করবে।
রচনায় বাস্তবায়ন
এটি সহায়ক হতে পারে, যদিও গুরুত্বপূর্ণ নয়, পুনর্গঠনের সময় কোন ফাংশনগুলিকে এড়িয়ে যেতে হবে তা ঠিক কীভাবে কম্পোজ নির্ধারণ করে তা বিবেচনা করা।
যখন কম্পোজ কম্পাইলার আপনার কোডে চলে, এটি প্রতিটি ফাংশন চিহ্নিত করে এবং বিভিন্ন ট্যাগের একটি দিয়ে টাইপ করে। এই ট্যাগগুলি প্রতিফলিত করে যে কীভাবে কম্পোজ ফাংশন পরিচালনা করে বা পুনর্গঠনের সময় টাইপ করে।
ফাংশন
কম্পোজ ফাংশনগুলিকে skippable
বা restartable
হিসাবে চিহ্নিত করতে পারে। মনে রাখবেন যে এটি একটি ফাংশনকে এক, উভয়, বা এর মধ্যে একটি হিসাবে চিহ্নিত করতে পারে:
- Skippable : যদি কম্পাইলার একটি কম্পোজেবলকে স্কিপযোগ্য হিসেবে চিহ্নিত করে, তাহলে কম্পোজ রিকম্পোজিশনের সময় এটিকে এড়িয়ে যেতে পারে যদি এর সমস্ত আর্গুমেন্ট তাদের আগের মানের সাথে সমান হয়।
- পুনঃসূচনাযোগ্য : একটি কম্পোজেবল যা পুনরায় চালু করা যায় একটি "স্কোপ" হিসাবে কাজ করে যেখানে পুনর্গঠন শুরু হতে পারে। অন্য কথায়, ফাংশনটি প্রবেশের একটি পয়েন্ট হতে পারে যেখানে কম্পোজ রাষ্ট্র পরিবর্তনের পরে পুনর্গঠনের জন্য কোড পুনরায় কার্যকর করা শুরু করতে পারে।
প্রকারভেদ
অপরিবর্তনীয় বা স্থিতিশীল হিসাবে চিহ্নের প্রকারগুলি রচনা করুন। প্রতিটি প্রকার এক বা অন্য:
- অপরিবর্তনীয় : রচনা একটি প্রকারকে অপরিবর্তনীয় হিসাবে চিহ্নিত করে যদি এর বৈশিষ্ট্যের মান কখনই পরিবর্তন করতে না পারে এবং সমস্ত পদ্ধতি রেফারেন্সিয়ালভাবে স্বচ্ছ হয়।
- নোট করুন যে সমস্ত আদিম প্রকারগুলি অপরিবর্তনীয় হিসাবে চিহ্নিত করা হয়েছে। এর মধ্যে রয়েছে
String
,Int
এবংFloat
।
- নোট করুন যে সমস্ত আদিম প্রকারগুলি অপরিবর্তনীয় হিসাবে চিহ্নিত করা হয়েছে। এর মধ্যে রয়েছে
- স্থিতিশীল : এমন একটি প্রকার নির্দেশ করে যার বৈশিষ্ট্য নির্মাণের পরে পরিবর্তিত হতে পারে। যদি এবং যখন রানটাইমের সময় সেই বৈশিষ্ট্যগুলি পরিবর্তিত হয়, কম্পোজ সেই পরিবর্তনগুলি সম্পর্কে সচেতন হয়।
ডিবাগ স্থায়িত্ব
যদি আপনার অ্যাপ এমন একটি কম্পোজেবল রিকম্পোজ করে যার পরামিতি পরিবর্তিত হয় নি, তাহলে প্রথমে পরিষ্কারভাবে পরিবর্তনযোগ্য প্যারামিটারগুলির জন্য এর সংজ্ঞা পরীক্ষা করুন। কম্পোজ সর্বদা একটি কম্পোনেন্টকে পুনরায় কম্পোজ করে যদি আপনি var
বৈশিষ্ট্য সহ একটি টাইপ পাস করেন, বা একটি val
বৈশিষ্ট্য যা একটি পরিচিত অস্থির টাইপ ব্যবহার করে।
রচনায় স্থিতিশীলতার সাথে জটিল সমস্যাগুলি কীভাবে নির্ণয় করা যায় সে সম্পর্কে বিস্তারিত তথ্যের জন্য, ডিবাগ স্থিতিশীলতা নির্দেশিকা দেখুন।
স্থিতিশীলতার সমস্যাগুলি ঠিক করুন
আপনার রচনা বাস্তবায়নে কীভাবে স্থিতিশীলতা আনতে হয় সে সম্পর্কে তথ্যের জন্য, স্থিতিশীলতার সমস্যা সমাধানের নির্দেশিকা দেখুন।
সারাংশ
সামগ্রিকভাবে, আপনার নিম্নলিখিত পয়েন্টগুলি নোট করা উচিত:
- পরামিতি : কম্পোজ আপনার কম্পোজেবলের প্রতিটি প্যারামিটারের স্থায়িত্ব নির্ধারণ করে তা নির্ধারণ করে যে এটি পুনর্গঠনের সময় কোন কম্পোজেবলগুলি এড়িয়ে যাবে।
- তাত্ক্ষণিক সমাধান : আপনি যদি লক্ষ্য করেন যে আপনার কম্পোজেবলটি এড়িয়ে যাওয়া হচ্ছে না এবং এটি একটি কর্মক্ষমতা সমস্যা সৃষ্টি করছে , তাহলে আপনাকে প্রথমে
var
প্যারামিটারের মতো অস্থিরতার সুস্পষ্ট কারণগুলি পরীক্ষা করা উচিত। - কম্পাইলার রিপোর্ট : আপনি আপনার ক্লাস সম্পর্কে কি স্থিতিশীলতা অনুমান করা হচ্ছে তা নির্ধারণ করতে কম্পাইলার রিপোর্ট ব্যবহার করতে পারেন।
- সংগ্রহ : রচনা সর্বদা সংগ্রহের ক্লাসগুলিকে অস্থির মনে করে, যেমন
List, Set
এবংMap
৷ কারণ এটা নিশ্চিত করা যায় না যে তারা অপরিবর্তনীয়। আপনি পরিবর্তে Kotlinx অপরিবর্তনীয় সংগ্রহগুলি ব্যবহার করতে পারেন বা আপনার ক্লাসগুলিকে@Immutable
বা@Stable
হিসাবে টীকা করতে পারেন। - অন্যান্য মডিউল : কম্পোজ সর্বদা অস্থির বলে মনে করে যেখানে তারা এমন মডিউল থেকে থাকে যেখানে কম্পোজ কম্পাইলার চলে না। প্রয়োজনে UI মডেল ক্লাসে ক্লাস গুটিয়ে নিন।
আরও পড়া
- কর্মক্ষমতা : রচনা কর্মক্ষমতা সম্পর্কে আরো ডিবাগিং টিপসের জন্য, আমাদের সেরা অনুশীলন নির্দেশিকা এবং I/O টক দেখুন।