RxJS (Reactive Extensions for JavaScript) এর মধ্যে বিভিন্ন ধরনের Subject রয়েছে, যার মাধ্যমে আমরা ডেটা বা ইভেন্ট স্ট্রিম তৈরি করতে পারি। Subject হলো একটি বিশেষ ধরনের Observable যা সাধারণভাবে Multicasting করতে ব্যবহৃত হয়, অর্থাৎ একাধিক সাবস্ক্রাইবারদের কাছে ডেটা পাঠাতে সক্ষম। তবে, BehaviorSubject, ReplaySubject, এবং AsyncSubject প্রতিটি কিছু আলাদা বৈশিষ্ট্য এবং আচরণ প্রদান করে। এই তিনটি ধরনের Subject এর মাধ্যমে আপনি ডেটা স্ট্রিমের বিভিন্ন পর্যায়ে সাবস্ক্রাইবারদেরকে ডেটা প্রদান করতে পারবেন। নিচে এই তিনটি Subject এর বিস্তারিত পরিচিতি দেওয়া হলো।
1. BehaviorSubject
BehaviorSubject একটি বিশেষ ধরনের Subject যা সর্বশেষ প্রাপ্ত মান বা অবস্থা স্টোর করে রাখে এবং নতুন সাবস্ক্রাইবারদের সেই মান প্রদান করে। এর মানে হলো, যখনই নতুন সাবস্ক্রাইবার যুক্ত হবে, সে সর্বশেষ প্রাপ্ত মানটি প্রথমেই পাবে এবং তারপর অন্য কোনো আপডেট পাওয়া শুরু করবে। এটি মূলত current value ধারণ করে।
বৈশিষ্ট্য:
- Initial value: BehaviorSubject শুরুতে একটি ইনিশিয়াল মান নিয়ে শুরু হয়, যা সাবস্ক্রাইবারদের কাছে সরবরাহ করা হয়।
- Last emitted value: যে কোনও সময় সর্বশেষ প্রাপ্ত মান স্টোর থাকে এবং নতুন সাবস্ক্রাইবারদের সর্বশেষ মান প্রদান করা হয়।
উদাহরণ:
import { BehaviorSubject } from 'rxjs';
const behaviorSubject = new BehaviorSubject('Initial Value'); // Initial value
// First subscriber
behaviorSubject.subscribe(value => console.log('Subscriber 1:', value));
// Emit new value
behaviorSubject.next('New Value');
// Second subscriber
behaviorSubject.subscribe(value => console.log('Subscriber 2:', value));
// Output:
// Subscriber 1: Initial Value
// Subscriber 1: New Value
// Subscriber 2: New Value
এখানে, Subscriber 2 সর্বশেষ মান 'New Value' পাবে, যদিও সে পরে সাবস্ক্রাইব করেছে।
2. ReplaySubject
ReplaySubject একটি Subject যা নির্দিষ্ট সংখ্যক পূর্ববর্তী মান "replay" (পুনরায় পাঠানো) করে সাবস্ক্রাইবারদের কাছে। এটি একটি ক্যাশের মতো কাজ করে, যেখানে আপনি কতগুলো আগের মান পুনরায় পাঠানো হবে তা নির্ধারণ করতে পারবেন।
বৈশিষ্ট্য:
- Buffer Size: ReplaySubject একটি buffer size ধারণ করে, যা নির্ধারণ করে কতটি পূর্ববর্তী মান সাবস্ক্রাইবারদের কাছে পাঠানো হবে।
- Replay all values: আপনি চাইলে সমস্ত মান বা নির্দিষ্ট সংখ্যক মান পুনরায় পাঠাতে পারেন।
উদাহরণ:
import { ReplaySubject } from 'rxjs';
const replaySubject = new ReplaySubject(2); // Buffer size 2
// First subscriber
replaySubject.subscribe(value => console.log('Subscriber 1:', value));
// Emit values
replaySubject.next('Value 1');
replaySubject.next('Value 2');
replaySubject.next('Value 3');
// Second subscriber
replaySubject.subscribe(value => console.log('Subscriber 2:', value));
// Output:
// Subscriber 1: Value 1
// Subscriber 1: Value 2
// Subscriber 1: Value 3
// Subscriber 2: Value 2
// Subscriber 2: Value 3
এখানে, Subscriber 2 শুধুমাত্র শেষ দুটি মান ('Value 2' এবং 'Value 3') পায়, কারণ ReplaySubject-এ buffer size 2 নির্ধারণ করা হয়েছিল।
3. AsyncSubject
AsyncSubject এমন একটি Subject যা শুধুমাত্র তার শেষ মানটি একটি সাবস্ক্রাইবারকে পাঠায়, এবং এটি তখনই করে যখন complete() কল করা হয়। এটি সাধারণত শেষ মান এবং তার পরবর্তী কোনো স্টেটের জন্য ব্যবহৃত হয়, যা ডেটা প্রবাহের শেষে সরবরাহ করা হয়।
বৈশিষ্ট্য:
- Only last value: AsyncSubject শুধুমাত্র শেষ মানটি সাবস্ক্রাইবারদের কাছে পাঠায়।
- Emits on complete: এটি শুধু তখনই মান প্রদান করে যখন complete() কল করা হয়।
উদাহরণ:
import { AsyncSubject } from 'rxjs';
const asyncSubject = new AsyncSubject();
// First subscriber
asyncSubject.subscribe(value => console.log('Subscriber 1:', value));
// Emit values
asyncSubject.next('Value 1');
asyncSubject.next('Value 2');
asyncSubject.next('Value 3');
// Complete the subject
asyncSubject.complete();
// Output:
// Subscriber 1: Value 3
এখানে, Subscriber 1 শুধুমাত্র শেষ মান 'Value 3' পায়, কারণ AsyncSubject শুধুমাত্র শেষ মানটি সাবস্ক্রাইবারদের কাছে পাঠায় এবং সেটি তখনই ঘটে যখন complete() কল করা হয়।
সারাংশ
- BehaviorSubject: সর্বশেষ মানটি সঞ্চয় করে রাখে এবং নতুন সাবস্ক্রাইবারদের সেই মান সরবরাহ করে। এটি একটি initial value গ্রহণ করে এবং সর্বশেষ প্রাপ্ত মানটি পুনরায় পাঠায়।
- ReplaySubject: পূর্ববর্তী মানগুলি ক্যাশে করে রাখে এবং নতুন সাবস্ক্রাইবারদের কাছে সেই মানগুলি পুনরায় পাঠায়। এটি buffer size দ্বারা নিয়ন্ত্রিত।
- AsyncSubject: শুধুমাত্র শেষ মানটি সাবস্ক্রাইবারদের কাছে পাঠায়, এবং এটি তখনই ঘটে যখন complete() কল করা হয়।
এই তিনটি Subject আপনাকে আলাদা আলাদা পরিস্থিতিতে ডেটা স্ট্রিমের মানগুলো পরিচালনা করতে সহায়তা করে, এবং আপনি যেখানে কোনটি ব্যবহার করবেন তা নির্ভর করে আপনার প্রোগ্রামের প্রয়োজনীয়তার উপর।
Read more