Basit Bir Üreteç Uygulama
Değerleri tembel biçimde üreten bir generator coroutine oluşturun
Basit Bir Üreteç Uygulama, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. 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, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Korutin Olarak Üreteçler
Bir üreteç, değerleri teker teker üreten bir korutindir. Üreteç için yapılan her çağrı bir sonraki değeri üretir ve askıya alınır.
Üreteç Türü
İç içe bir promise_type içeren bir sınıf tanımlayın. Derleyici bunu korutinin durumunu yönetmek için kullanır.
template <typename T>
struct Generator {
struct promise_type {
T current_value;
Generator get_return_object() {
return Generator{std::coroutine_handle<promise_type>::from_promise(*this)};
}
std::suspend_always initial_suspend() { return {}; }
std::suspend_always final_suspend() noexcept { return {}; }
void return_void() {}
std::suspend_always yield_value(T value) {
current_value = value;
return {};
}
void unhandled_exception() { std::terminate(); }
};
std::coroutine_handle<promise_type> h;
// ... constructors, destructor, next() ...
};Üreteci Kullanma
Tanımlandıktan sonra üreteçler, Python'daki yield kullanımı kadar doğal gelir.
Generator<int> counting() {
int n = 0;
while (true) co_yield n++;
}
auto g = counting();
for (int i = 0; i < 5; ++i) {
std::cout << g.next() << " ";
}
// 0 1 2 3 4coroutine_handle
Derleyici bir std::coroutine_handle döndürür. Bu, askıya alınmış korutini temsil eder — resume(), destroy() çağrıları yapabilir veya done() ile tamamlanıp tamamlanmadığını kontrol edebilirsiniz.
Askıya Alma Noktaları
Her co_yield askıya alır. Çağıran resume() çağrısını yaptığında yürütme bir sonraki askıya alma noktasına veya korutinin sonuna kadar devam eder.
initial_suspend ve final_suspend
İki özelleştirme noktası:
initial_suspend— tembel başlangıç içinsuspend_always, hevesli başlangıç içinsuspend_neverdöndürürfinal_suspend— temizlemeyi denetler. Uygun yok etme için genelliklesuspend_alwayskullanılır
C++23 std::generator
C++23, <generator> içinde std::generator türünü ekledi. Artık yaygın durumlar için bu türü elle yazmanız gerekmez.
#include <generator>
std::generator<int> counting() {
int n = 0;
while (true) co_yield n++;
}Aralık Tabanlı for
Üreteç türü begin/end işlemlerini destekliyorsa aralık tabanlı for doğrudan çalışır.
for (int x : counting()) {
if (x >= 10) break;
std::cout << x;
}Çekme ve İtme Anlambilimi
Üreteçler çekme tabanlıdır — yinelemeyi çağıran yönetir. İtme tabanlı korutinler ise eşzamansız görevlerdir.
Kullanım Alanları
Üreteçler şunlar için oldukça uygundur:
- Tembel diziler (Fibonacci, asal sayılar, dosyaları satır satır okuyan okuyucular)
- Verileri önceden somutlaştırmadan akış hâlinde işleme
- Ağaç benzeri yapılar üzerinde yineleme
Bellek Konuları
Korutin çerçevesi varsayılan olarak öbekte ayrılır. Satır içi yerleştirme izin verdiğinde derleyici bu ayırmayı atlayabilir — performans önemli olduğunda ölçüm yapın.
İncelenecek Kütüphaneler
Öğrenmek için Lewis Baker'ın cppcoro kütüphanesinde iyi belgelenmiş üreteç ve görev türleri bulunur. Boost.Asio, korutin dostu G/Ç sağlar. C++23 ve sonraki sürümler standart kütüphane desteği ekler.
Hızlı Kontrol
Üreteç korutinleri için C++23 standart kütüphane türü nedir?
Özet
Bir üreteç korutini, co_yield ile değerleri tembel olarak üretir. Bunu, promise_type içeren bir sınıfla uygulayın. C++23, std::generator türünü standartlaştırdı. Üreteçler tembel diziler ve akış hâlinde işleme için idealdir.
Sıkça Sorulan Sorular
“Basit Bir Üreteç Uygulama” dersi ücretsiz mi?
Evet — “Basit Bir Üreteç Uygulama” 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 C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Basit Bir Üreteç Uygulama” dersinde ne öğreneceğim?
Değerleri tembel biçimde üreten bir generator coroutine oluşturun C++ Academy 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.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, 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 2. dersidir.
“Basit Bir Üreteç Uygulama” 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 C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy 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
- Coroutine Kavramları: co_await, co_yield, co_return
- Basit Bir Üreteç Uygulama
- Eşzamansız Görevler ve Awaiter Türleri
- Coroutine Çerçevesi Ayırma