Junior — Middle
Reaktiv proqramlaşdırma kontekstində Subject və BehaviorSubject arasındakı fərqi izah edin
sobes.tech Süni İntellekt
AI-dan cavab
Reaktiv proqramlaşdırmada, xüsusən RxDart kimi kitabxanalarda, Subject və BehaviorSubject xüsusi axın (Streams) növləridir və həm məlumat mənbəyi (Observable), həm də dinləyici (Observer) kimi fəaliyyət göstərə bilirlər.
-
Subject sadəcə yeni dəyərləri qəbul edə bilən və abunəçilərə ötürən axındır. Ancaq, əgər abunəçi artıq göndərilmiş dəyərlərdən sonra qoşulursa, o, bu əvvəlki dəyərləri almır.
-
BehaviorSubject isə, son göndərilmiş dəyəri saxlayır və onu dərhal yeni abunəçiyə verir. Bu, yeni abunəçilərin dərhal cari vəziyyəti almalarını istədiyiniz zaman faydalıdır.
Dartda RxDart istifadə edərək nümunə:
import 'package:rxdart/rxdart.dart';
void main() {
final subject = PublishSubject<int>(); // PublishSubject, Subject-in ekvivalentidir
final behaviorSubject = BehaviorSubject<int>();
subject.add(1);
behaviorSubject.add(1);
subject.listen((value) => print('Subject dinləyicisi: $value'));
behaviorSubject.listen((value) => print('BehaviorSubject dinləyicisi: $value'));
subject.add(2);
behaviorSubject.add(2);
// Nəticə:
// BehaviorSubject dinləyicisi: 1
// Subject dinləyicisi: 2
// BehaviorSubject dinləyicisi: 2
}
Burada, BehaviorSubject dərhal son dəyəri (1) yeni abunəçiyə verir, Subject isə vermir.