Observable 101 [TR]
Giriş
Merhabalar, “Reactive Programlama”nın temelinde ne var, daha önce nerede kullanmıştık bunları kısaca açıklayalım.
Kimler İçin
“Reactive Programlama”yla, muhtemelen RxSwift, Combine ya da SwiftUI framework’leriyle yeni tanışanlar için. Sadece temeli var burada, devamı için başka yazılarla devam etmelisin.
Amaç
Ne yapmak istediğimizden başlayalım. Bazı değişiklikleri takip etmek, o değişiklik yaşanırsa bir takım işleri yaptırmak istediğimiz birçok örnek var.
- Network’ten gelen değerleri takip etmek.
- Kullanıcının UI’daki hareketlerini takip etmek.
- Cihazın durumlarını takip etmek(yatay kullanım, karanlık modu vb)
Bunlar genelde bir süre sonra cevapları oluşan değişikliklerdir. Tabi her türlü değişiklik reaktif programlamayla takip edilebilir ama asıl ihtiyaç zaman alan işlemlerde oluşur.
Biraz da detaylandırırsak, kullanıcı ilgili button’a bastı mı diye sürekli bir kontrol yapılması, olası her kontrol noktası için bunları tek tek hazırlamak hem uğraştırıcı hem de kaynak kullanımı açısından çok korkunç. (Komik ama kodlamayı yeni öğrendiğim zamanlarda aklıma başka bir yöntem gelmiyordu. 😇)
Böyle durumlarda o beklediğimiz değişiklik yaşandığında diğer yerleri kendisinin tetiklemesi çok daha akla yatıyor, kaynak kullanımını normalleştiriyor.
Get Emin Teyhan USLU’s stories in your inbox
Join Medium for free to get updates from this writer.
Aslında @IBAction ile yazılmış method’larla birlikte reaktif programlamayı daha önce çok defa kullandık.
Ayrıca iOS’ta bolca gördüğümüz “Completion Handler” da bu konunun başka bir çözümü, ama bu başka bir yazının konusu…
Peki biz bunu kod üzerinden nasıl yapabiliriz?
Açıklama
Bu konuda yapılan iş, en basit kısmı. Oluşacak değişiklikleri bir değişkende tutup, bu değişkenin setter’ından bazı kodları tetiklemek lazım.
Swift’te setter için ayrı bir method hazırlamak yerine, property observer yapısı kullanılması işimizi kolaylaştıracaktır. “property observer” detayları için tıklayabilirsiniz.
class Observable<T> {
var value: T? {
didSet {
callBack?(value)
}
}
private var callBack: ((T?) -> Void)?
func bind(callBack: @escaping ((T?) -> Void)) {
self.callBack = callBack
}
}Takip edilecek datayı value değişkeninde, tetiklenecek işleri callBack değişkeninde tutulur. Hızlıca hazırlayalım.
var observableText: Observable<String> = Observable()
observableText.bind { value in
print("doing something with => \(value ?? "nil")")
}Henüz değer vermedik, yani tetiklenme söz konusu değil. Ama değer değişikliğini takip edeceğimiz variable’ı ve tetiklenecek kod bloğunu hazırlamış olduk.
Sırada çalışmaları kontrol etmekte.
Sonuç
Daha önce reaktif programlamanın inatla kafama yatmamasının sebebi üstteki 7–8 satır kodu görmeden, yani nasıl çalıştığını bilmeden doğrudan frameworklerin kodlarını öğrenmeye çalışmamdı. Yazı çok kısa ve çok temel oldu ama keşke daha önce bilseydim dediğim bu kodları işte bu yüzden açıklamayı kendime borç bildim.
Umarım faydalı olmuştur, ama bu daha başlangıç. Nasıl çalıştığını öğrendiysek, sırada Frameworkleri öğrenip ortaya iş koymak var.
kodlar için github linki.

![Observable 101]](https://miro.medium.com/v2/resize:fit:1358/format:webp/0*LKQFqHVxhh3wCWeh.png)






