JS Asenkron Mu Senkron Mu? Hadi Biraz Konuşalım!
Bugün size bir konu anlatacağım: JavaScript’te asenkron mu senkron mu? Ama ne anlatacağım, ona önce karar veremedim. Bu yazıyı yazarken, aslında biraz kafam karışmıştı. Hani, bazen bir şeyin tam olarak ne olduğunu anlamıyorsun ya, ama orada öyle bir hissiyat var. İşte tam olarak o hissiyatı yaşadım. Neyse, derinlere inmeden önce, sizin de benimle birlikte keşfetmenizi istiyorum. Hadi bakalım!
Sen Kimsin, Asenkron?
Hadi şimdi biraz “asenkron”dan bahsedelim. Ama önce birader, sen kimsin? Niye herkesin gözüne sokuyorsun kendini? Asenkron, sanki biraz kimlik krizi yaşıyor gibi ama neyse. Düşünün, asenkron bir iş, diğer işleri beklemeden yürüyebilen bir iş. Yani, siz JavaScript kodu yazarken bir şeyler yapıyorsunuz, ama işin bitmesini beklemiyorsunuz. Mesela, bir şeyler internetten çekiyorsunuz. JavaScript, diğer işlemleri beklemeden devam ediyor. Gibi düşünün: Hani ben bir yere gitmek istiyorum ama orada uzun kuyruk var. Ne yapıyorum? Kuyruğa girmiyorum, gidiyorum! Sonra kuyruktaki işler tamamlandığında, ben de oraya dönebilirim. Kulağa eğlenceli değil mi? Bu tam olarak asenkron!
Bir örnek verelim mi? Hayatın içinden bir örnek düşünelim: “Yemek sipariş ettim, sipariş gelene kadar ben bir dizi izleyeyim.” Siparişin gelmesi ne kadar zaman alırsa alsın, ben dizi izlemeye devam ediyorum. Yani, yemek gelene kadar beklemiyorum. İşte, asenkron çalışma tarzı böyle bir şey.
Ya Senkron, Ne Var Ne Yok?
Şimdi de senkron var tabii. Senkron, bildiğiniz üzere, tıpkı “görevimi tamamlayana kadar diğer şeylere bakmam” mantığında çalışır. Yani, diyelim ki bir iş yapıyorsunuz, tamamlanmadan diğer işlere geçemezsiniz. Birinci iş biter, sonra ikinci işe geçersiniz. Tabii, bunu biraz daha açıklamak gerek. Bir tür sabır testi, bir nevi. O ne kadar basit, o kadar beklemeli. İkili ilişkiler gibi. “Bekle, ben bir saniye, şu işleri halledeyim, sonra sana döneceğim!” Bunu hepimiz yapıyoruz, değil mi? İşte, senkron böyle bir şey.
Mesela, sabah kahvaltısına gidiyorsunuz ve karşınızda “simidi hemen alalım mı?” diyorlar. O an “hayır, önce çayı içeyim” diyorsunuz. Simidi o çay bitmeden almak, senkron düzeni bozar. Çayı içmeden simidi alırsanız, hayatı yanlış yaşarsınız, değil mi? İşte senkron çalışma tarzı da böyle. Sırası geldiğinde ilerlersiniz, işlem adım adım tamamlanır.
Asenkron ve Senkron Arasındaki Farklar
Bunları anlatırken fark ettim, ikisinin arasında büyük bir fark var. Ama işte ne var biliyor musunuz? Hem asenkron hem de senkron bazen bizim hayatımıza çok uygun olabiliyor. Bu durum, günlük yaşantımıza dair önemli bir gösterge olabilir. Hani, bazen işlerinizi yaparken birbirine karıştırabiliyorsunuz. Mesela, çay içtikten sonra yemek söyleme konusuna da geçmek istersiniz ama yemek hala gelmemiştir. O an işler asenkron olmalıdır! Ama o çayı içmeden yemek siparişi veremezsiniz. Bu bir nevi senkron. Anlatabiliyor muyum?
Asenkron ve Senkron’un Kod Dünyasındaki İşleyişi
Şimdi biraz daha işin içine girelim. Eğer JavaScript’i yazıyorsanız, bu asenkron ve senkron meselesi çok önemli. Kodu yazarken, bazen işler öyle karmaşıklaşıyor ki insanın kafası karışıyor. Düşünün, “setTimeout” fonksiyonu var. Bu, bir şeyin yapılmasını belirli bir süre bekleterek yapmanızı sağlar. Yani, burada işler asenkron. Fakat biz hemen istemez miyiz ki, bir şeyin hemen yapılmasını? Ama bazen hemen sonuç alamayız. Hadi bir örnek verelim. Bir arkadaşınıza WhatsApp’tan mesaj attınız, o size geri dönene kadar beklemeye başladınız. İşte o, senkron bir bekleme. Bu bekleme bitene kadar, bir şey yapamayız.
Ama JavaScript’te bu bekleme işleri bizi deli edebilir. Asenkron yapı, kodun her şeyin önüne geçmesine yardımcı olur. Yani, çok daha dinamik bir çözüm sağlarsınız. Ama dikkat! Bu işlerinizi düzgünce sıraya koymazsanız, “callback hell” diye bir durumla karşılaşabilirsiniz. Yani, bir işin sonunda ne olduğunu bilmeden bir diğer işin üstüne atlayabilirsiniz. Bu yüzden dikkatli olmalısınız. Mesela, yazdığınız her satırda ne yaptığınızı, hangi işin önce gelmesi gerektiğini unutmayın. Sonra, işler birbirine girer. “Bir dakika, ben hangi işi yapıyordum?” diye sorar hale gelirsiniz.
Örnek: JavaScript’in Zor Sorusu
Bir gün JavaScript’te “asenkron mu, senkron mu?” diye düşünürken, birden aklıma bir şey geldi. Acaba bu soruyu gerçekten doğru soruyor muyum? Çünkü JavaScript, asenkron yapısıyla biraz “biri gelsin, ben de biraz bekleyeyim” gibi bir yapıda. Ama ne zaman ki bu kodların sırasını şaşırırsanız, o zaman işte gerçek karmaşa başlıyor. Kafanız karışmaya başlıyor. Hani bazen öyle hissediyorsunuz ya, “Daha demin tam ne yapıyordum?” işte o noktada JavaScript de size aynı şekilde kafa karıştırıcı olabilir. Çünkü senkron bir iş, her şeyin sırasıyla tamamlanmasını isterken, asenkron işler bir yandan devam ederken diğerini beklemeye gerek duymuyor. Bu da bazen sinir bozucu olabiliyor.
Sonuç Olarak: Hangisi Daha İyi?
Şimdi, asenkron mu senkron mu daha iyi, diye düşündüm bir de. Tabii ki her iki yapı da kendine göre avantajlara sahip. Ama bence her şeyin kendi yerinde olması gerekiyor. Bazı işler için asenkron en mükemmel çözümken, bazı işler için senkron daha doğru olabilir. Mesela, işler sırasıyla yapılmalı. Ama aynı zamanda, asenkron yapıyı kullandığınızda, işler daha hızlı ilerler ve siz daha az beklemek zorunda kalırsınız. Yani, sonuçta her şey dengeyle ilgili! Hem asenkron, hem senkron işler bazen bir arada olmalı, tıpkı bizim günlük hayatımızda olduğu gibi.
Sonuçta hayat, asenkron ve senkron arasında gidip gelir. Bir gün beklerken diğer gün hızla ilerlersiniz. O yüzden kod yazarken veya hayatı yaşarken, dengeyi bulmak önemli. Ne fazla bekleyin, ne de hiç durmadan koşun. Biraz durun, sonra ilerleyin. Bu hayatın sırrı olabilir mi?