[Dart/Flutter] / Dart/Flutter Ders 2 - Asenkron Programlama

(29.01.2026 tarihinde oluşturuldu.)

Bağımlılık eklemek için pubspec.yaml dosyası içerisinde dependencies kısmı altına ilgili paket ismi yazılır. 

dependencies:
  http: ^1.3.0
Eklenen bağımlılığın projeye dahil edilmesi için terminalde get komutu uygulanmalıdır.

dart pub get

Bağımlılıklar eklendikten sonra eklenen paket projeye import yöntemi ile dahil edilebilir.

import 'package:http/http.dart' as http; // Add this line

Eşzamansız (asenkron) ve geriye değer döndüren fonksiyon oluşturmak için Future anahtar kelimesi ile başlanılır. Bu kelime ilk etapta bir Future nesnesi döndürür. Bu nesne aslında gelecekte asıl gönderilecek verinin yerini geçici olarak almaktadır. Asıl veri geldiğinde teslim edilir. async ifadesi ise fonksiyonu eşzamansız olarak işaretleyerek içinde await kelimesinin kullanılabilmesine olanak tanır.

Future<String> getWikipediaArticle(String articleTitle) async {
  final client = http.Client(); // Create an HTTP client
  final url = Uri.https(
    'en.wikipedia.org', // Wikipedia API domain
    '/api/rest_v1/page/summary/$articleTitle', // API path for article summary
  );
  // ...
}

Yukarıdaki fonksiyonun sonucunu bekleyecek fonksiyon da async olarak işaretlenmelidir. Aşağıda geri değer döndürmeyen (void) olarak imzalanmış ve async olarak işaretlenmiş fonksiyon görülmekte. Bu fonksiyon içindeki kodlar getWikipediaArticle() fonksiyonundan gelecek sonucu beklediği için async olarak işaretlenmiş ve içinde await sözcüğü kullanılmış. late ifadesi değişkene gelecekte değer verileceğini belirtir.

// ... (beginning of searchWikipedia function, after determining articleTitle)
void searchWikipedia(List<String>? arguments) async {
  late String? articleTitle;
  if (arguments == null || arguments.isEmpty) {
    print('Please provide an article title.');
    final inputFromStdin = stdin.readLineSync();
    if (inputFromStdin == null || inputFromStdin.isEmpty) {
      print('No article title provided. Exiting.');
      return;
    }
    articleTitle = inputFromStdin;
  } else {
    articleTitle = arguments.join(' ');
  }
  print('Looking up articles about "$articleTitle". Please wait.');
  // Call the API and await the result
  var articleContent = await getWikipediaArticle(articleTitle);
  print(articleContent); // Print the full article response (raw JSON for now)
}

Şimdi main() fonksiyonuna son halini verelim;

// ... (existing const version declaration and printUsage function)
void main(List<String> arguments) {
  if (arguments.isEmpty || arguments.first == 'help') {
    printUsage();
  } else if (arguments.first == 'version') {
    print('Dartpedia CLI version $version');
  } else if (arguments.first == 'wikipedia') { // Changed to 'wikipedia'
    // Pass all arguments *after* 'wikipedia' to searchWikipedia
    final inputArgs = arguments.length > 1 ? arguments.sublist(1) : null;
    searchWikipedia(inputArgs); // Call searchWikipedia (no 'await' needed here for main)
  } else {
    printUsage(); // Catch all for any unrecognized command.
  }
  print("Fonksiyon kapandı");
}


main() fonksiyonunda neden async & await gibi ifadeler kullanılmadı?
Çünkü searchWikipedia(inputArgs); fonksiyonunu beklemek istemedik. Başlatıp kendi işine devam etmesini istedik. Program çalıştırıldığında ekranda makale json kodlarından önce "Fonksiyon kapandı" yazısının görünmesi bunu göstermekte.

İşte fonksiyonun çalıştırılmış hali ve çıktısı;

$ dart run bin/cli.dart wikipedia Hacking
Fonksiyon kapandı
{"type":"disambiguation",
"title":"Hacking",
"displaytitle":"<span class=\"mw-page-title-main\">Hacking</span>",
"namespace":{"id":0,"text":""},
"wikibase_item":"Q180371",
"titles":{"canonical":"Hacking","normalized":"Hacking","display":"<span class=\"mw-page-title-main\">Hacking</span>"},
"pageid":13192,
"lang":"en",
"dir":"ltr",
"revision":"1298343912",
"tid":"40dc94b9-56cc-11f0-8f09-e0c5e010eef5",
"timestamp":"2025-07-01T22:39:31Z",
"description":"Topics referred to by the same term",
"description_source":"local",
"content_urls":{"desktop":{"page":"https://en.wikipedia.org/wiki/Hacking","revisions":"https://en.wikipedia.org/wiki/Hacking?action=history","edit":"https://en.wikipedia.org/wiki/Hacking?action=edit","talk":"https://en.wikipedia.org/wiki/Talk:Hacking"},
"mobile":{"page":"https://en.wikipedia.org/wiki/Hacking","revisions":"https://en.wikipedia.org/wiki/Special:History/Hacking","edit":"https://en.wikipedia.org/wiki/Hacking?action=edit","talk":"https://en.wikipedia.org/wiki/Talk:Hacking"}},
"extract":"Hacking may refer to:",
"extract_html":"<p><b>Hacking</b> may refer to:</p>"}

Kaynak: https://dart.dev/learn/tutorial/async


YORUMLAR (0 yorum)



Yorum Gönder
CAPTCHA