Redux একটি স্টেট ম্যানেজমেন্ট লাইব্রেরি যা Pure Functions এবং Reducers ব্যবহার করে অ্যাপ্লিকেশনের স্টেট পরিচালনা করতে সহায়তা করে। এর মধ্যে Pure Functions এর গুরুত্ব এবং Reducers কীভাবে কাজ করে, তা বুঝতে পারা খুবই গুরুত্বপূর্ণ।
Redux অ্যাপ্লিকেশনগুলিতে Reducers এমন Pure Functions হিসেবে কাজ করে, যা অ্যাপ্লিকেশনের স্টেট পরিবর্তন করতে ব্যবহৃত হয়। এই ধারণাগুলি স্টেট পরিবর্তনের প্রক্রিয়াকে সহজ, পূর্বানুমানযোগ্য এবং ডিবাগযোগ্য করে তোলে।
Pure Functions কী?
Pure Function হলো এমন একটি ফাংশন যা কোনো ধরনের পার্শ্বপ্রতিক্রিয়া (side effects) সৃষ্টি না করে এবং একটি নির্দিষ্ট ইনপুটের জন্য একই আউটপুট প্রদান করে। এর মানে, যদি আপনি একটি পিউর ফাংশনকে একসাথে একই ইনপুট দেন, তবে এটি সবসময় একই রেজাল্ট দিবে।
Pure Functions এর প্রধান বৈশিষ্ট্য:
- একই ইনপুটে একই আউটপুট: একই ইনপুট দিলে সবসময় একই আউটপুট পাওয়া যায়।
- কোন পার্শ্বপ্রতিক্রিয়া নেই (No Side Effects): পিউর ফাংশন কোনও বাহ্যিক ডেটা পরিবর্তন করে না, যেমন গ্লোবাল ভ্যারিয়েবল বা বাইরের স্টেট।
- স্টেট অপরিবর্তনীয়তা (Immutability): পিউর ফাংশন কখনোই তার ইনপুট বা বাহ্যিক ডেটা পরিবর্তন করে না। এটি নতুন ডেটা তৈরি করে এবং পুরানো ডেটা অপরিবর্তনীয় রাখে।
Redux-এ, রিডিউসার ফাংশনগুলো Pure Functions হিসেবে কাজ করে, যা নিশ্চিত করে স্টেট পরিবর্তনের প্রক্রিয়া নিরাপদ এবং পূর্বানুমানযোগ্য।
Reducers কী?
Reducers হল পিউর ফাংশন, যা স্টেট এবং অ্যাকশন ইনপুট হিসেবে নিয়ে নতুন স্টেট রিটার্ন করে। Redux-এ, স্টেট কখনোই সরাসরি পরিবর্তিত হয় না। পরিবর্তন করতে হলে, Reducer ফাংশন একটি নতুন স্টেট অবজেক্ট তৈরি করে, যা আগের স্টেটের সাথে মিলে না।
Redux-এ Reducer এর কাজ হচ্ছে:
- অ্যাকশন অনুযায়ী স্টেট পরিবর্তন করা।
- স্টেটের একটি নতুন কপি তৈরি করা (immutable স্টেট)।
Reducer এর কার্যপদ্ধতি:
- স্টেট এবং অ্যাকশন গ্রহণ: Reducer দুটি প্যারামিটার গ্রহণ করে: বর্তমান স্টেট (যা প্রথমবার
undefinedহতে পারে) এবং একশন। - স্টেট পরিবর্তন: Reducer শুধুমাত্র একশন অনুযায়ী স্টেট পরিবর্তন করে, কিন্তু পুরানো স্টেটকে সরাসরি পরিবর্তন করে না।
- নতুন স্টেট রিটার্ন: Reducer পুরানো স্টেটের কপি তৈরি করে এবং নতুন স্টেট রিটার্ন করে।
Reducer এর উদাহরণ:
// Reducer function
function counterReducer(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1; // Return new state, don't modify old state
case 'DECREMENT':
return state - 1;
default:
return state;
}
}
এখানে:
- state = 0: প্রথমবারের মতো স্টেট যদি না থাকে, তাহলে সেটি 0 দিয়ে শুরু হবে।
- action: অ্যাকশন অবজেক্ট যা
typeধারণ করে (যেমন,INCREMENTবাDECREMENT)। - new state return: রিডিউসার একটি নতুন স্টেট রিটার্ন করে, পুরোনো স্টেট পরিবর্তন না করে।
Reducer এর বিশেষ বৈশিষ্ট্য:
- পিউর ফাংশন: রিডিউসার কখনোই বাহ্যিক স্টেট পরিবর্তন বা পার্শ্বপ্রতিক্রিয়া সৃষ্টি করে না।
- স্টেট অপরিবর্তনীয়তা (Immutability): রিডিউসার কখনো পুরোনো স্টেট পরিবর্তন করে না; বরং একটি নতুন কপি তৈরি করে।
- নির্ধারিত একশন: রিডিউসার শুধুমাত্র প্রদত্ত অ্যাকশন অনুযায়ী স্টেট পরিবর্তন করে।
Reducer এর মধ্যে Pure Function এর ভূমিকা
Redux-এ, Reducers হল পিউর ফাংশন হিসেবে কাজ করে, যা স্টেটের অপরিবর্তনীয়তা এবং পূর্বানুমানযোগ্যতা বজায় রাখে। যখন কোনো অ্যাকশন ডিসপ্যাচ করা হয়, রিডিউসার ঐ অ্যাকশন অনুযায়ী নতুন স্টেট তৈরি করে এবং কোনভাবেই পুরানো স্টেট পরিবর্তন করে না। এর ফলে অ্যাপ্লিকেশনের স্টেট ম্যানেজমেন্ট আরো সহজ এবং ডিবাগযোগ্য হয়।
উদাহরণ:
// Reducer with pure function
function todoReducer(state = [], action) {
switch (action.type) {
case 'ADD_TODO':
return [...state, action.payload]; // return new state
case 'REMOVE_TODO':
return state.filter(todo => todo.id !== action.payload.id);
default:
return state;
}
}
এখানে:
ADD_TODOএকশনে, রিডিউসার নতুন টুডু আইটেম অ্যাড করে একটি নতুন অ্যারে রিটার্ন করে। পূর্বেরstateঅপরিবর্তিত থাকে।REMOVE_TODOএকশনে, রিডিউসার শুধুমাত্র মুছে ফেলা আইটেমটি বাদ দিয়ে একটি নতুন অ্যারে রিটার্ন করে।
Pure Functions এবং Reducers এর সুবিধা
- ডিবাগিং সহজ: পিউর ফাংশন কোনো পার্শ্বপ্রতিক্রিয়া তৈরি না করলে, আপনি একেবারে নির্দিষ্ট ইনপুটের জন্য একই আউটপুট আশা করতে পারেন। ফলে স্টেট পরিবর্তন এবং ডিবাগিং আরো সহজ হয়।
- পুনঃব্যবহারযোগ্যতা (Reusability): পিউর ফাংশনগুলো সাধারণত সহজে পুনঃব্যবহারযোগ্য, কারণ তারা নির্দিষ্ট ইনপুটের জন্য নির্দিষ্ট আউটপুট প্রদান করে।
- পারফরম্যান্স উন্নয়ন: Immutable স্টেট ব্যবহারের কারণে, আপনি পরিবর্তিত স্টেটের পরিবর্তে আগের স্টেটের কপি রাখতে পারেন, যা পারফরম্যান্সের দিক থেকে আরো ভালো।
সারাংশ
Pure Functions এবং Reducers Redux-এর অন্যতম মূল অংশ। Pure Functions নিশ্চিত করে যে, স্টেট পরিবর্তন এবং প্রোগ্রামের আচরণ পূর্বানুমানযোগ্য ও নির্ভরযোগ্য হবে, কারণ একটাই ইনপুটের জন্য একটাই আউটপুট পাওয়া যাবে। Redux-এ, Reducers হল পিউর ফাংশন যা স্টেট পরিবর্তন করার জন্য ব্যবহৃত হয়, তবে কখনোই আগের স্টেট পরিবর্তন করে না। স্টেট পরিবর্তন করার জন্য, রিডিউসার একটি নতুন কপি রিটার্ন করে, যা স্টেটের অপরিবর্তনীয়তা বজায় রাখে এবং অ্যাপ্লিকেশনকে আরো সহজ, স্কেলেবল ও ডিবাগযোগ্য করে তোলে।
Read more