Sobes.tech
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, SubjectBehaviorSubject 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.