Reaktif Programlama Nedir? — Swift
Bu sorunun cevabı bizi uzun bir yolculuğa çıkartacak. Metrobüs gibi.
Herkese selamlar ✌️ Öğrenme olayı hiç bitmiyor yahu, dolayısıyla yine bir aradayız 🥳
Özellikle son dönemde öneminin arttığını gözlemlediğim reaktif programlama konusunda derinleşmeyi ve bu konu ile ilgili bir şeyler yazmayı daha fazla ertelemek istemedim.
Bu yazıda birkaç soruya biriktirdiğim cevapları sizinle paylaşacağım. Bu sayede önemli bir programlama konseptine aşina olacak, çantaya yeni bir alet ekleme yolunda önemli bir adım atmış olacaksınız 🛠️
Kod ile uygulamayı bir sonraki yazıya bıraktım. Combine ve RXSwift’ten bahsedeceğiz. Ama öncelikle konsepti anlamamız gerek. Kafa karıştırmak yok. Hadi başlayalım.
- Reaktif programlama nedir?
- Reaktif programlamanın özellikleri nelerdir?
- Reaktif programalama ne işe yarar?
Her zamanki gibi temelinden ve basit bir yaklaşımla tanımları ele alalım. Sonra da anlayacağımız bir dile çevirelim 😅
Reaktif programlama, asenkron veri akışlarına (data streams) dayalı ve gerçek zamanlı olay (event) bazlı bir yazılım paradigmasıdır. 🔗
Tıpkı prosedürel programlama, fonksiyonel programlama ve nesneye yönelik programlama gibi, reaktif programlama da başka bir programlama stilidir. Gelecekte herhangi bir zamanda ortaya çıkabilecek farklı türdeki olaylara/verilere eş zamanlı olmayan şekilde tepki vermekle ilgilenir. Bu kadar. Reaktif programlama bundan başka bir şey değil. 🔗
Tanımlar her zamanki gibi 🤯🤬😤😭🥲 Ama biz yılmazlarız, devam edelim 🤿
Buna göre sistem, veri akışlarında yaşanan değişikliklere (olaylara) anlık olarak tepki gösterir. Bu da uygulamalarımıza yalnızca gerçek zamanlı yanıt verme olanağı sağlamakla kalmaz, aynı zamanda asenkron veri akışlarının işlenmesini basitleştirerek kodumuzun daha temiz ve daha anlaşılır olmasını sağlar. 🧹
Şimdi benim gibi, günlük hayatla bağ kurunca daha iyi anlayanlar için de bir örnek geliyor.🤭
Örneğimizde bir metrobüs hattı, durağı ve bu durakta bekleyen insanlar var diyelim. Her metrobüs yaklaşması, bir olaydır ve yolcular da bu olay gerçekleştiğinde reaksiyon gösterir, yani metrobüse binerler. 🚍
Reaktif programlama da benzer bir şekilde çalışır. Veri akışıyla (metrobüs sefer saatleri) ve değişimin ortaya çıkmasıyla (yeni bir metrobüs gelişi) ilgilenir ve uygulamaların bu olaylara gerçek zamanlı olarak yanıt vermesini sağlar. Tıpkı yolcuların metrobüse binme reaksiyonunu göstermesi gib️i. ️🏃♂️️️️️🏃♂️🏃♂️
Metrobüs hattı bir kaza (error) meydana gelmediği sürece açıktır. Ve planlı bir sonlanma gerçekleşeceğine karar verilirse (completion) kapatılacağı önceden bize bildirilecektir.
Peki reaktif programlamanın özellikleri nelerdir?
Reaktif Manifesto’ya göre;
- Duyarlıdır: Sistem eğer mümkünse anlamlı bir sürede yanıt verir. Duyarlılık, kullanılabilirlik ve işe yararlığın temel taşlarından biridir ama bundan daha önemlisi arızaların daha hızlı tespit edilip etkin şekilde ele alınması anlamına da gelir. Duyarlı sistemler hızlı ve istikrarlı yanıt zamanına odaklanır, güvenilir üst sınırlar içerisinde istikrarlı hizmet kalitesi sunarlar.
- Dirençlidir: Sistem arıza anında duyarlı kalır. Bu, yalnızca yüksek erişilebilir, kritik sistemlere has değildir. Dirençli olmayan her sistem arıza durumunda duyarsız kalacaktır. Dirençlilik replikasyon, kapsama, izolasyon ve delegasyon ile sağlanır.
- Esnektir: Sistem değişken iş yükü altında duyarlı kalır. Reaktif Sistemler, gerektiğinde girdilere hizmet veren kaynakları artırarak ya da azaltarak girdi seviyelerindeki değişikliklere tepki verebilirler.
- Mesaj Güdümlüdür: Reaktif Sistemler gevşek bağlılık, izolasyon ve konum şeffaflığını sağlayacak ve hataları mesaj olarak delege etmeyi mümkün kılacak şekilde bileşenleri arasında bir sınır çizmek için asenkron mesaj iletimini kullanır. Belirtik mesaj iletimi kullanmak sistemdeki mesaj kuyruklarını şekillendirip izleyerek ve gerektiğinde geri-basınç uygulayarak yük yönetimini, esnekliği ve akış kontrolünü sağlar.
Eee çok havalı ve işlevsel görünüyor. O zaman ‘her şeyi reaktif programlama ile yapalım bitsin gitsin 😅 ’ demek istiyor olabilirsiniz. Ancak bildiğimiz üzere bir taşla bütün kuşları vurmayı başaramayız.
O zaman gerçekte reaktif programlamanın ne işe yaradığına odaklanalım. Çünkü aslında reaktif programlama ile çözülecek her şeyi başka yaklaşımlar kullanarak da çözmek mümkündür.
Reaktif programalama ne işe yarar?
- Asenkron işlemleri gerçekleştirmek, daha okunabilir hale getirmek için oldukça önemli bir araçtır.
- Geri-basınç (backpressure) reaktif programlamanın en önemli özelliklerinden biridir. Bu özellik sayesinde uygulama, karşılayabileceği veri miktarını bildirerek sunucudan yavaşlamasını ya da hızlanmasını talep edebilir. Bu sayede olası problemlerin kolaylıkla önüne geçilmiş olur.
- Sistem kaynaklarının daha iyi kullanımını sunar. Bu sayede uygulama daha az kaynak kullanarak daha verimli çalışabilecektir.
Güldük eğlendik ve umarım öğrendik. Bir yazının daha sonuna geldik.
Sonuç:
- Reaktif programlama nedir, özellikleri nelerdir ve ne işe yarar gibi önemli sorulara cevap verdik 😎
- Alet çantamıza güncel teknolojilerden bir araç eklemek için ilk adımı attık ✅
- Günlük hayattan örneklendirerek bilgilerimizin kalıcı ve anlamlı olmasına imkan tanıdık 🎯
Bu konu ile ilgili öğrenmeye devam ettikçe bilgilerimi paylaşacağım. Siz de öğrenme sürecinize faydalı olduğunu düşündüyseniz bir beğeni olur, alkış olur, yorum da olur yapın bir şeyler. Yeni yazılarımdan haberdar olmak veya soru sormak için de mutlaka LinkedIn ya da buradan takibe alın ✌️
https://www.linkedin.com/in/eyupmert/
Kaynaklar:
https://www.freecodecamp.org/news/reactive-programming-beginner-guide/
https://medium.com/digitalfrontiers/reactive-programming-in-a-nutshell-28bd8cb13266
https://www.gencayyildiz.com/blog/reactive-programming-nedir/