0Pricing
Flutter Mobile Development · Ders

Future'lar ve Async/Await

Engellemeyen işlemleri gerçekleştirmek ve gecikmeli sonuçları işlemek için Dart'ın `Future` sınıfını ve `async`/`await` anahtar sözcüklerini öğrenin.

Future'lar ve Async/Await, CoddyKit'te ücretsiz bir Flutter Mobile Development dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Flutter Mobile Development öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Flutter Mobile Development kursu toplamda 4 dersten oluşur.

What is Asynchronous Code?

Uygulama geliştirme sürecinde, internetten veri çekmek veya bir dosya okumak gibi zaman alan görevleri sıklıkla gerçekleştirmemiz gerekir.

Eğer bu görevler uygulamanızın ana iş parçacığını (main thread) bloke ederse, arayüzünüz yanıt vermez hale gelir ve donar. Bu, kötü bir kullanıcı deneyimidir!

Asenkron programlama, uygulamanızın uzun süren bir görevi başlatmasını ve bu işlemin bitmesini beklerken diğer şeyleri (arayüzü güncellemek gibi) yapmaya devam etmesini sağlar.

The Problem with Blocking Code

3 saniye süren bir görev hayal edin. Ana iş parçacığında (main thread) çalıştırılırsa, uygulamanız 3 saniye boyunca donacaktır. Nasıl bloke ettiğini görmek için bu örneği çalıştırmayı deneyin:

void main() {
  print("Starting a long task...");
  // Simulate a long-running operation
  var result = _performHeavyCalculation();
  print("Task finished with result: $result");
  print("End of program.");
}

String _performHeavyCalculation() {
  // Simulate delay without async/await
  var startTime = DateTime.now();
  while (DateTime.now().difference(startTime).inSeconds < 3) {
    // Busy-wait, blocking the thread
  }
  return "Calculated Data";
}

Meet the Dart Future

Dart'ın Future sınıfı, bloklayıcı olmayan (non-blocking) işlemler için çözümünüzdür. Bir Future, geleceğin belirli bir anında kullanılabilir olacak potansiyel bir değeri veya hatayı temsil eder.

  • Bir değer için "borç senedi" (IOU - I Owe You) gibidir.
  • Asenkron bir fonksiyonu çağırdığınızda, hemen bir Future nesnesi döndürür.
  • Gerçek sonuç, işlem tamamlandığında Future nesnesine iletilir.

Bunu yemek sipariş etmek gibi düşünün; hemen bir fiş (Future) alırsınız, ancak yemek (değer) daha sonra gelir.

Making a Simple Future

Future.delayed kullanarak belirli bir gecikmenin ardından tamamlanan bir Future oluşturabilirsiniz. Bu yöntem, bir süre (duration) ve gecikme sona erdiğinde çalıştırılacak bir fonksiyon alır.

"Program continues!" mesajını bloke etmeden, "Data received!" mesajının kısa bir bekleyişten sonra nasıl göründüğünü görmek için bu kodu çalıştırın.

void main() {
  print("Program starts!");

  Future.delayed(Duration(seconds: 2), () {
    print("Data received after 2 seconds!");
  });

  print("Program continues immediately!");
  print("End of main function.");
}

Getting Values with .then()

Bir Future'ın nihayetinde sağladığı değeri gerçekten kullanmak için, .then() metodunu kullanarak bir geri arama (callback) fonksiyonu eklersiniz.

.then() içindeki kod, yalnızca Future başarıyla tamamlandığında ve değerini ilettiğinde çalışacaktır. Tamamlanmış bir asenkron göreve bu şekilde tepki verirsiniz.

void main() {
  print("Fetching user data...");

  _fetchUserData().then((userData) {
    print("User data fetched: $userData");
  });

  print("UI can update while data fetches.");
}

Future<String> _fetchUserData() {
  return Future.delayed(Duration(seconds: 2), () => "Alice (ID: 123)");
}

Handling Future Errors

Asenkron işlemler başarısız olabilir (ör. ağ sorunları). Hataları ele almak için .then() metodundan sonra .catchError() zincirleybilirsiniz. Bu geri çağrı (callback), Future bir hatayla tamamlandığında çalışacaktır.

.catchError() hata nesnesini alır ve sorunlara karşı zarif bir şekilde tepki vermenize olanak tanır.

void main() {
  print("Attempting to fetch data...");

  _fetchFaultyData().then((data) {
    print("Data received: $data");
  }).catchError((error) {
    print("Error caught: $error");
  });
}

Future<String> _fetchFaultyData() {
  return Future.delayed(Duration(seconds: 2), () {
    throw Exception("Failed to connect to server!");
  });
}

Simplify with async and await

.then() ve .catchError() çalışsa da, birçoğunu zincirleme eklemek okunabilirliği zorlaştırabilir. Dart, asenkron kodun senkron kod gibi görünmesini ve hissettirmesini sağlamak için async ve await anahtar kelimelerini sunar.

  • async: Bir fonksiyonu asenkron olarak işaretler. Bir async fonksiyon her zaman bir Future döndürür.
  • await: Yalnızca bir async fonksiyonun içinde kullanılabilir. Üzerinde beklediği Future tamamlanana kadar async fonksiyonun yürütülmesini duraklatır.

Programın geri kalanı, bir await aktifken çalışmaya devam eder.

Async/Await in Action

Kullanıcı verisi çekme örneğimizi async ve await kullanarak yeniden yazalım. Kodun ne kadar daha temiz ve sıralı göründüğüne dikkat edin!

await anahtar kelimesi, main içindeki kodun bekliyor gibi görünmesini sağlar, ancak main fonksiyonunun kendisi bir async fonksiyonudur; bu nedenle aslında bir Future döndürür ve genel programı bloke etmez.

void main() async { // main function is now async
  print("Fetching user data with async/await...");

  String userData = await _fetchUserData(); // Await the Future
  print("User data fetched: $userData");

  print("UI can update while data fetches.");
}

Future<String> _fetchUserData() {
  return Future.delayed(Duration(seconds: 2), () => "Bob (ID: 456)");
}

Try-Catch with Async/Await

async ve await ile hata yönetimi çok tanıdık hale geliyor! Futures tarafından fırlatılan istisnaları yakalamak için await ifadelerinin etrafında standart try-catch blokları kullanabilirsiniz.

Bu, asenkron işlemlerdeki olası hatal yönetimini çok daha sezgisel ve okunabilir hale getirir.

void main() async {
  print("Attempting to fetch data with try-catch...");

  try {
    String data = await _fetchFaultyData();
    print("Data received: $data");
  } catch (e) {
    print("Error caught: $e");
  }
  print("Program continues after error handling.");
}

Future<String> _fetchFaultyData() {
  return Future.delayed(Duration(seconds: 2), () {
    throw Exception("Network connection lost!");
  });
}

Check Your Understanding

Aşağıdaki Dart kod parçacığını göz önünde bulundurun:

void main() async {
  print("A");
  await Future.delayed(Duration(seconds: 1), () => print("B"));
  print("C");
}

Futures & Async/Await Recap

Dart'ta asenkron programlamanın temellerinde ustalaştınız!

  • Future: Daha sonra kullanılabilir olacak bir değer için yer tutucu.
  • .then()/.catchError(): Bir Future'ın başarı veya başarısızlığını ele almak için kullanılan yöntemler.
  • async: Asenkron işlemler gerçekleştiren ve bir Future döndüren bir fonksiyonu işaretler.
  • await: Asenkron kodun senkron kod gibi okunmasını sağlayarak, bir Future tamamlanana kadar bir async fonksiyonunu duraklatır.
  • try-catch: Güçlü hata yönetimi için await ile birlikte kullanılır.

Bu araçlar, harici kaynaklarla etkileşime giren duyarlı Flutter uygulamaları oluşturmak için çok önemlidir. Sonraki adımda, HTTP istekleri yapmak için bu kavramları kullanacağız!

Sıkça Sorulan Sorular

“Future'lar ve Async/Await” dersi ücretsiz mi?

Evet — “Future'lar ve Async/Await” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Flutter Mobile Development kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Flutter Mobile Development kursu toplamda 4 dersten oluşur.

“Future'lar ve Async/Await” dersinde ne öğreneceğim?

Engellemeyen işlemleri gerçekleştirmek ve gecikmeli sonuçları işlemek için Dart'ın `Future` sınıfını ve `async`/`await` anahtar sözcüklerini öğrenin. Flutter Mobile Development ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Flutter Mobile Development öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Flutter Mobile Development, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Future'lar ve Async/Await” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Flutter Mobile Development dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Flutter Mobile Development dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Future'lar ve Async/Await
  2. HTTP İstekleri ve JSON
  3. Async İçinde Hata İşleme
  4. Akışlar ve Tepkisel Veriler
← Flutter Mobile Development Sayfasına Dön