bu yaştan sonra bi de bunları öğreniyoz
@sentorbot: kanka sen biliyor musun bu observables nedir ne işe yarar? rxjs den örneklerle açıklar mısın. kod bloklarını [pre][/pre]
içine yaz.
@zeratul: Kardeşim, observables dediğin şey rxjs kütüphanesindeki bir yapı. Aslında bu yapı reactive programming'in temel taşı sayılır. Observables, asynchronous veri akışını kontrol etme ve yönetme imkanı verdiği için oldukça faydalıdır. Örneğin bir HTTP request sonucunu observable olarak alabiliriz ve gerektiği zaman gelen sonuçları işleyebiliriz.
RxJS de observables ile çalışır ve bunun avantajlarını kullanarak programlama yapmamızı sağlar. Veriler arasındaki bağımlılıkları izlememize olanak tanır.
Örnek kod ise şöyle:
import { Observable } from 'rxjs';
const myObservable = new Observable(observer => {
observer.next('Hello World!');
observer.complete();
});
myObservable.subscribe(val => console.log(val));
Bu örnekte myObservable adında basit bir observable yaratıldı ve subscribe ile değerleri yakaladık. Güzel gösteren tarafına gelince hani hem back-end'de çalışabileceğiniz gibi front-end projelerde de bahsedilen Angular gibi frameworklerle kullanım kolaylığı sunar.
Şimdilik javafx üzerine dersen bana o da olur tabii ama
@sentorbot: vay yavşak neler biliyon sen. peki bir observable her zaman oncomplete i çalıştırır mı? mesela observable bir click event ile observable httpRequest aynı şekilde mi çalışıyor?
@zeratul: Kanka, observable'lar asynchronous veri akışını yönetmek için kullanılır. Bu nedenle bir observable'in tamamlanması bazı durumlarda mümkün olmayabilir. Örneğin bir click event'i ile oluşturduğumuz observable sürekli olarak yeni tıklamalar üretebilir ve hiçbir zaman tamamlanmayabilir.
Diğer yandan HTTP request gibi belirli bir sonucu beklediğimiz observables ise genellikle ya başarılı bir şekilde sonlandığında veya hata meydana geldiği zaman onComplete metodunu çalıştırırlar. Yani buradaki temel fark, sürekli verinin gelip gelmediği ve ne kadarının geleceği konusunda.
Özetlemek gerekirse, her observable aynı şekilde onComplete metodunu çalıştırmayabilir ancak bu yapıda da genellikle bir tamamlanma noktası olduğundan bahsedebiliriz. Umarım açıklayıcı olabilmişimdir, senin de işine yaramıştır :)
@sentorbot: allah razı olsun kanka. birbirinden bağımsız iki observable(a ve b) var elimizde. bunlar tamamlandığında bir iş(c) yaptırmak istiyorum. ama ikisinin de tamamlanmasını bekleyeceğiz. buna örnek bir kod yazar mısın
@zeratul: Tabii kanka, RxJS'in combineLatest metodu senin işine yarayabilir. Bu metod sayesinde iki farklı observable'ın sonuçları istendiği gibi birleştirilebilir ve ortak bir işlem yapılabilir.
Aşağıdaki örnekte, a ve b adında iki observable oluşturup bu ikisinin de sonucunun tamamlanmasını bekleyerek birbirlerini gösteriyorum:
import { combineLatest } from 'rxjs';
const obsA = of(1, 2, 3);
const obsB = of('a', 'b', 'c');
combineLatest(obsA, obsB).subscribe(([valA, valB]) => {
// Burada daire içinde istediğin ortak işlemi yazabilirsin.
});
Bu örnekte combineLatest ile a ve b isimli iki observable'ı bir araya getirdik. subscribe içerisinde ise valA ve valB parametreleriyle her iki observable'dan gelen değerleri aldık. İstersen burada bu değerler üzerinde toplama veya başka matematiksel işlemleri gerçekleştirebilirsin.
Umarım açıklayıcılığımdan dolayı yardı