Kotlin Coroutines (Türkçe)

Kotlin Coroutines (Türkçe)

Kotlin ile modern eşzamanlı programlamaya kapsamlı bir giriş

Kitap Hakkında

Kotlin Coroutines (Türkçe), Kotlin dilinin en güçlü araçlarından biri olan Coroutine yapısını derinlemesine anlamak isteyen geliştiriciler için hazırlanmış kapsamlı bir rehberdir. Bu kitap, Kotlin ile asenkron programlama, yapılandırılmış eşzamanlılık (structured concurrency), CoroutineContext, Flow yapısı ve daha fazlasını adım adım ve örneklerle açıklar.

Orijinal olarak Marcin Moskala tarafından yazılan bu eser, Türkçe çevirisiyle artık daha geniş bir geliştirici kitlesine ulaşmayı hedefliyor. Kitap, hem Android geliştiricilerine hem de backend Kotlin kullanıcısına hitap etmektedir. Kuramsal temellerden başlayarak gerçek hayat senaryolarına kadar uzanan yapısıyla Kotlin Coroutines’i anlamak isteyen herkes için ideal bir kaynaktır.

Bu kitap, orijinali İngilizce dilinde yazılmış olan Kotlin Coroutines adlı eserin Türkçe diline çevirisidir.

Editörler Hakkında

Marcin Moskała
Marcin Moskała

Marcin Moskala is an experienced developer and Kotlin trainer. He is the founder of the Kt. Academy, Kotlin GDE, an official JetBrains partner for teaching Kotlin, and author of the books Effective Kotlin, Kotlin Coroutines, and Android Development with Kotlin.

Hasan Tunçay
Hasan Tunçay
Hasan Tunçay is a passionate software developer specializing in Android and modern cross-platform projects with Jetpack Compose. Experienced in web development with Spring Boot and Angular, he contributes to open-source projects and occasionally publishes libraries. As the Turkish translator of the Kotlin Coroutines book, he aims to support the ecosystem and share valuable insights.


İçindekiler

  • Giriş
      • Kitap kime hitap ediyor?
      • Kitabın bölümleri
      • Konuların kapsamı
      • Geliştiriciler İçin Kotlin Serisi
      • Kurallar ve Kılavuzlar
      • Kod Kuralları
      • Sürüm
      • Alıştırmalar ve çözümler
      • Teşekkürler
    Bölüm 1: Kotlin Coroutines’i Anlamak
    • Neden Kotlin Coroutines?
      • Basitlik (Simplicity)
      • Performans
      • İptal Mekanizması (Cancellation)
      • Eşzamanlama (Synchronization)
      • Test Edilebilirlik (Testability)
      • Flow
      • Coroutines Çoklu Platform Desteğine Sahiptir
      • Kotlin Coroutines ile İlgili En Büyük Problem
      • Sonuç
    • Sequence Builder (Dizi Üretici)
      • Gerçek hayattaki kullanım alanları
      • Alıştırma: Faktöriyel Dizisi
      • Alıştırma: Asal Sayılar Dizisi
    • Askıya Alma (Suspension) Mekanizması Nasıl Çalışır?
      • Oyun Benzetimi Üzerinden Thread ve Coroutine Karşılaştırması
      • Askıya Alınabilen (Suspending) Fonksiyonlar
      • İlk Askıya Alma (Suspension) İşlemi
      • What is stored in the continuation?
      • Devam Nesnesinde (Continuation) Neler Saklanır?
      • Coroutine’i Geciktirme
      • Resuming with a value
      • Bir Değer ile Devam Etme (Resuming with a Value)
      • İstisna (Exception) ile Devam Ettirme (Resume)
      • Coroutine askıya alınır, fonksiyon değil
      • Özet
      • Alıştırma: Geri Çağırma (Callback) Fonksiyon Sarmalayıcıları
      • Alıştırma: Devam (Continuation) Saklama
    • Coroutines under the hood
    • Coroutine Mekanizmasının İç Yapısı
      • Devam Nesnesi Geçişli Programlama (Continuation-Passing Style)
      • Çok Basit Bir Fonksiyon
      • A function with a state
      • Durum Bilgisine Sahip Bir Fonksiyon
      • Bir Değer ile Devam Ettirilen Fonksiyon
      • The call stack
      • Çağrı Yığını (Call Stack)
      • Farklı Bağlamlarda Askıya Alınan Fonksiyonlar
      • Gerçek Kod
      • Askıya Alınan Fonksiyonların Performansı
      • Özet
      • Alıştırma: Bir Devam Nesnesi (Continuation) Neleri Saklar?
    • Coroutines: built-in support vs library
    • Coroutine’ler: Yerleşik Destek(built-in support) vs Kütüphane(library)
    Bölüm 2: Kotlin Coroutines Kütüphanesi
    • Starting coroutines
    • Eşzamanlı İş Parçacıkları (Coroutines) Nasıl Başlatılır?
    • Asenkron Eşzamanlı İş Parçacığı Başlatıcıları
      • Engelleyici Eşzamanlı İş Parçacığı Başlatıcıları (Blocking Coroutine Builders)
      • Yapısal Eşzamanlılık (Structured Concurrency)
      • Özet
      • Alıştırma: UserDetailsRepository
      • Alıştırma: BestStudentUseCase
      • Alıştırma: CommentService
      • Alıştırma: mapAsync
    • Genel Bakış
    • Eşzamanlı İşlem Bağlamı (Coroutine Context)
      • CoroutineContext Arayüzü(interface)
      • CoroutineContext İçinde Öğe Bulma
      • Bağlam (Context) Ekleme
      • Boş İşlem Kapsamı (Empty Coroutine Context)
      • Öğeleri Çıkartma (Subtracting Elements)
      • Kapsamı Katlama (Folding Context)
      • Eşzamanlı İşlem Bağlamı ve Başlatıcılar
      • Askıya Alınabilir Bir Fonksiyonda Bağlama (Context) Erişim
      • Coroutine’in Kapsamı Fonksiyonları ve Bağlam Mirası
      • Askıya Alınabilir Fonksiyonlarda Bağlamı Değiştirme
      • Kendi İşlem Bağlamımızı Oluşturma
      • Coroutines and thread elements
      • Eşzamanlı İşlemler ve İş Parçacığı Öğeleri
      • Özet
      • Alıştırma: Bağlam Yayılımını Anlamak
      • Alıştırma: CounterContext
    • İş Parçacığı Yöneticileri (Dispatchers)
      • Varsayılan İş Parçacığı Yöneticisi (Default Dispatcher)
      • Varsayılan Dağıtıcıyı (Dispatcher) Sınırlama
      • Ana Dağıtıcı (Main Dispatcher)
      • Giriş/Çıkıș (GÇ/IO ) Dağıtıcısı
      • Özel Sınırlamalı Dağıtıcı
      • Sabit İş Parçacığı Havuzuna Sahip Dağıtıcı (Dispatcher)
      • Tek İş Parçacığına Sınırlı Dağıtıcı (Dispatcher)
      • Project Loom’dan Gelen Sanal İş Parçacıklarını Kullanma
    • İş Parçacığı Yöneticileri (Dispatchers)
      • Varsayılan İş Parçacığı Yöneticisi (Default Dispatcher)
      • Varsayılan Dağıtıcıyı (Dispatcher) Sınırlama
      • Ana Dağıtıcı (Main Dispatcher)
      • Giriş/Çıkıș (GÇ/IO ) Dağıtıcısı
      • Özel Sınırlamalı Dağıtıcı
      • Sabit İş Parçacığı Havuzuna Sahip Dağıtıcı (Dispatcher)
      • Tek İş Parçacığına Sınırlı Dağıtıcı (Dispatcher)
      • Project Loom’dan Gelen Sanal İş Parçacıklarını Kullanma
      • Bağlı Olmayan Dağıtıcı (Unconfined Dispatcher)
      • Anında Ana İş Parçacığı Görevlendirmesi (Immediate Main Dispatching)
      • Devamlılık (Continuation) Kesici
      • Dağıtıcıların farklı görevlerdeki performansı
      • Özet
      • Alıştırma: DiscNewsRepository
      • Alıştırma: Dağıtıcılarla Deneyler
      • Dağıtıcıların Performans Testi
    • İş ve Coroutine Yaşam Döngüsü
      • Job ve Coroutine İlişkileri
      • Coroutine Yaşam Döngüsü
      • Job’un Tamamlanmasını Bekleme
      • Job Fabrika Fonksiyonu
      • Coroutineleri Senkronize Etme
      • Özet
    • İptal Mekanizması(Cancellation)
      • Temel İptal Mekanizması
      • finally Bloğu
      • invokeOnCompletion
      • Alt Coroutine’lerin İptali
      • Coroutine Kapsamında İptal İşlemi
      • Sadece Bir Çağrı Daha
      • Durdurulamaz Olanı Durdurmak
      • CancellationException’in Özel Durumu
      • CancellationException Üst Coroutine’e Yayılmaz
      • withTimeout
      • suspendCancellableCoroutine
      • Özet
      • Alıştırma: İptal Mekanizmasıyla İlgili Hataları Düzeltme
    • İstisna Yönetimi
      • İstisnalar ve Yapılandırılmış Eşzamanlılık(structured concurrency)
      • SupervisorJob
      • supervisorScope
      • İstisnalar ve await Çağrısı
      • CoroutineExceptionHandler
      • Özet
    • Bir coroutine scope (iş kapsamı) oluşturma
      • CoroutineScope fabrika fonksiyonu
      • Arka plan kapsamı (background scope) oluşturma
      • Android’de scope oluşturma
      • Özet
      • Alıştırma: NotificationSender
      • Alıştırma: BaseViewModel
    • Değiştirilebilir duruma erişimi eşzamanlama (synchronizing)
      • Atomik değerlerin kullanımı (Using atomic values)
      • Synchronized bloklar (Synchronized blocks)
      • Tek iş parçacığıyla sınırlı bir dispatcher kullanımı
      • Mutex
      • Semaphore
      • Summary
      • Özet
      • Alıştırma: CompanyDetailsRepository
      • Alıştırma: CancellingRefresher
      • Alıştırma: TokenRepository
      • Alıştırma: Suspended lazy
      • Alıştırma: mapAsync ile eşzamanlılık sınırı (concurrency limit)
    • Kotlin Coroutines Testi
      • Zaman Bağımlılıklarının Test Edilmesi (Testing time dependencies)
      • TestCoroutineScheduler ve StandardTestDispatcher
      • runTest
      • Arka plan scope’u (Background scope)
      • İptal (cancellation) ve bağlam aktarımının (context passing) test edilmesi
      • UnconfinedTestDispatcher
      • Mock nesnelerin kullanımı (Using mocks)
      • Dispatcher değiştiren fonksiyonların test edilmesi
      • Fonksiyon çalışırken gerçekleşen davranışların test edilmesi
      • Yeni coroutine başlatan fonksiyonların test edilmesi
      • runTest içinde scope gerektiren sınıfların test edilmesi
      • Ana dispatcher’ın (Main dispatcher) değiştirilmesi
      • Coroutine başlatan Android fonksiyonlarının test edilmesi
      • Test dispatcher’ı bir rule ile ayarlamak
      • Özet
      • Alıştırma: UserDetailsRepository Sınıfını Test Etme
      • Alıştırma: mapAsync Fonksiyonunun Test Edilmesi
      • Alıştırma: NotificationSender Sınıfını Test Etme
      • Alıştırma: Bir ViewModel Sınıfını Test Etme
    Bölüm 3: Channel ve Flow
    • Channel
      • Kanal Türleri (Channel Types)
      • Arabellek Taşması Durumunda (On Buffer Overflow)
      • Teslim Edilemeyen Öğeler İçin İşleyici (On Undelivered Element Handler)
      • Fan-out (Yayılma Modeli)
      • Fan-in (Toplanma Modeli)
      • Pipelines
      • Pipelines (Veri İşleme Hatları)
      • Pratik Kullanım (Practical Usage)
      • Özet (Summary)
      • Alıştırma: UserRefresher
      • Alıştırma: Kafeterya simülasyonu
    • Select (Seçim)
      • Ertelenmiş (deferred) değerleri seçme
      • Channel’lardan Seçim Yapma (Selecting from channels)
      • Özet
      • Alıştırma: raceOf
    • Sıcak (Hot) ve Soğuk (Cold) Veri Kaynakları
    • Sıcak ve Soğuk Akışlar
      • Sıcak Channel, Soğuk Flow
      • Summary
      • Özet
    • Flow’a Giriş
      • Flow’un Diğer Değer Temsil Yöntemleriyle Karşılaştırılması
      • Flow’un Özellikleri
      • Flow Terimlendirmesi (Nomenclature)
      • Gerçek Hayattaki Kullanım Durumları
      • Özet
    • Flow’u Anlamak
      • Flow’u Anlamak
      • Flow İşlemenin (Processing) Nasıl Çalıştığı
      • Flow Doğası Gereği Eşzamanlıdır (Synchronous)
      • Flow ve Paylaşılan Durum (Shared State)
      • Sonuç
    • Flow Oluşturma (Flow Building)
      • Ham Değerlerden Flow Oluşturma (Flow from raw values)
      • Dönüştürücüler (Converters)
      • Bir Fonksiyonu Flow’a Dönüştürme
      • Flow ve Reactive Streams
      • Flow Oluşturucular (Flow Builders)
      • Flow Oluşturucuyu Anlamak (Understanding flow builder)
      • channelFlow
      • callbackFlow
      • Özet
      • Alıştırma: Flow Yardımcıları (Flow utils)
      • Alıştırma: Tüm Kullanıcıları Veren Flow (All users flow)
      • Alıştırma: distinct
    • Flow Yaşam Döngüsü Fonksiyonları (Flow lifecycle functions)
      • onEach
      • onStart
      • onCompletion
      • onEmpty
      • catch
      • Yakalanmamış İstisnalar (Uncaught exceptions)
      • retry
      • flowOn
      • launchIn
      • Özet
      • Alıştırma: TemperatureService
      • Alıştırma: NewsViewModel
    • Akış (Flow) İşleme
      • map
      • filter
      • take and drop
      • Koleksiyon İşleme (Collection Processing) Nasıl Çalışır?
      • merge, zip ve combine
      • fold ve scan
      • flatMapConcat, flatMapMerge ve flatMapLatest
      • Değişmeyene Kadar Ayırt Etme (distinctUntilChanged)
      • buffer ve conflate
      • debounce
      • sample
      • Terminal işlemler (Terminal operations)
      • Özet
      • Alıştırma: ProductService
      • Alıştırma: Flow Kata
      • Alıştırma: MessageService
    • SharedFlow ve StateFlow
      • SharedFlow
      • shareIn
      • StateFlow
      • stateIn
      • Özet
      • Alıştırma: ProductService’i Güncelleyin
      • Alıştırma: TemperatureService’i Güncelleyin
      • Alıştırma: LocationService
      • Alıştırma: PriceService
      • Alıştırma: stateIn kullanarak NewsViewModel
    • Flow Yapılarının Test Edilmesi
      • Dönüştürücü (Transformation) Fonksiyonlar
      • Testing infinite flows
      • Sonsuz Flow’ların Test Edilmesi
      • Kaç bağlantının açıldığını belirlemek
      • ViewModel’ların Test Edilmesi
      • Özet
      • Alıştırma: Flow Testi
    Bölüm 4: Kotlin Coroutines Uygulamada
    • Common use cases (Yaygın Kullanım Senaryoları)
      • Data/Adapters Layer (Veri/Adaptör Katmanı)
      • Domain Layer (Alan Katmanı)
      • Presentation/API/UI layer (Sunum/API/UI katmanı)
      • Özet
    • Diğer Dillerden Coroutine Kullanımı
      • Farklı Platformlarda Thread Kullanımı
      • Askıya Alınan(suspending) Fonksiyonları Askıya Alınmayan(non-suspending) Fonksiyonlara Dönüştürmek
      • Calling suspending functions from other languages
      • Diğer Dillerden Askıya Alınan (Suspending) Fonksiyonları Çağırmak
      • Flow ve Tepkisel-Reaktif Akışlar (Reactive Streams)
      • Özet
    • Coroutine’lerin Başlatılması ile Askıya Alınan Fonksiyonların Karşılaştırılması
    • En İyi Uygulamalar
    Sonuç
    • Exercise solutions

Leanpub 60 Gün %100 Memnuniyet Garantisi

Satın alma tarihinden itibaren 60 gün içinde, herhangi bir Leanpub alışverişiniz için sadece iki tıklamayla %100 geri ödeme alabilirsiniz.

Aslında bu bizim için teknik olarak riskli, çünkü kitap veya kurs dosyalarına her halükarda sahip olacaksınız. Ancak ürünlerimize, hizmetlerimize, yazarlarımıza ve okuyucularımıza o kadar güveniyoruz ki, sattığımız her şey için tam para iade garantisi sunmaktan mutluluk duyuyoruz.

Bir şeyin ne kadar iyi olduğunu ancak deneyerek öğrenebilirsiniz ve %100 para iade garantimiz sayesinde bunu denemek için kesinlikle hiçbir risk yok!

Yani, Sepete Ekle düğmesine tıklamamak için hiçbir neden yok, değil mi?

Tüm koşulları görün...

10$ satışta 8$, 20$ satışta 16$ kazanın

7.99$ veya üzeri satışlarda %80 telif, 0.99$ ile 7.98$ arasındaki satışlarda %80 telif eksi 50 cent sabit ücret ödüyoruz. 10$'lık bir satışta 8$, 20$'lık bir satışta 16$ kazanırsınız. Yani, kitabınızın iade edilmemiş 5000 kopyası 20$'dan satılırsa, 80.000$ kazanırsınız.

(Evet, bazı yazarlar Leanpub'da bundan çok daha fazlasını kazandılar.)

Aslında, yazarlar Leanpub'da yazarak, yayınlayarak ve satarak14 milyon doların üzerinde kazandılar.

Leanpub'da yazmak hakkında daha fazla bilgi edinin

Ücretsiz Güncellemeler. DRM Koruması Yok.

Bir Leanpub kitabı satın aldığınızda, yazar kitabı güncellediği sürece ücretsiz güncellemeler alırsınız! Birçok yazar, kitaplarını yazarken Leanpub'ı kullanarak kitaplarını süreç içinde yayınlar. Ne zaman satın aldıklarına veya ne kadar ödediklerine (ücretsiz dahil) bakılmaksızın tüm okuyucular ücretsiz güncellemeler alır.

Çoğu Leanpub kitabı PDF (bilgisayarlar için) ve EPUB (telefonlar, tabletler ve Kindle için) formatlarında mevcuttur. Bir kitabın içerdiği formatlar, bu sayfanın sağ üst köşesinde gösterilir.

Son olarak, Leanpub kitaplarında DRM kopya koruma saçmalığı yoktur, bu yüzden desteklenen herhangi bir cihazda kolayca okuyabilirsiniz.

Leanpub'ın e-kitap formatları ve bunları nerede okuyabileceğiniz hakkında daha fazla bilgi edinin

Leanpub'da Yazın ve Yayımlayın

Leanpub'ı kullanarak devam eden ve tamamlanmış e-kitapları ve çevrimiçi kursları kolayca yazabilir, yayımlayabilir ve satabilirsiniz!

Leanpub, basit ve zarif bir yazma ve yayımlama iş akışını, devam eden e-kitapların satışına odaklanan bir mağazayla birleştiren, ciddi yazarlar için güçlü bir platformdur.

Leanpub, yazarlar için sihirli bir daktilodur: sadece düz metin olarak yazın ve e-kitabınızı yayımlamak için bir düğmeye tıklamanız yeterli. (Veya e-kitabınızı kendi yönteminizle oluşturuyorsanız, kendi PDF ve/veya EPUB dosyalarınızı yükleyip tek tıklamayla yayımlayabilirsiniz!) Gerçekten bu kadar kolay.

Leanpub'da yazma hakkında daha fazla bilgi edinin