Lambda İfadelerine Giriş
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 42 / 56.
Lambda ifadeleri, tam ihtiyacınız olan yerde küçük, anonim fonksiyonlar oluşturmanıza olanak tanıyan güçlü bir C++ özelliğidir. Bunları, ayrı bir fonksiyon bildirimi yazmak zorunda kalmadan tanımlayabileceğiniz ve kullanabileceğiniz mini fonksiyonlar olarak düşünebilirsiniz.
Bir lambda ifadesinin temel sözdizimi şu kalıbı takip eder: [](){}. Köşeli parantezler [] yakalama yan tümcesi (capture clause) olarak adlandırılır, parantezler () parametreleri tutar (tıpkı normal fonksiyonlarda olduğu gibi) ve süslü parantezler {} fonksiyon gövdesini içerir.
Yakalama yan tümcesi, lambdanın çevreleyen kapsamdaki hangi değişkenleri kullanabileceğini kontrol eder. En yaygın formlar şunlardır:
[=] — tüm yerel değişkenleri değer ile yakalar (lambda kendi kopyasını alır)[&] — tüm yerel değişkenleri referans ile yakalar (lambda orijinallere erişir)[] — hiçbir şeyi yakalamaz (lambda dışarıdaki hiçbir değişkeni kullanamaz)Basit bir lambda'nın nasıl oluşturulacağı ve çağrılacağı aşağıda açıklanmıştır:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Lambda fonksiyonunu çağırBir lambdayı bir değişkende saklamadan da hemen tanımlayabilir ve çalıştırabilirsiniz:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Lambda ifadeleri, ayrıca tanımlamak istemediğiniz kısa, tek seferlik fonksiyonlar için özellikle yararlıdır. Kodunuzu daha özlü hale getirirler ve ilgili mantığı bir arada tutarlar.
Görev
KolayLambda ifadelerinin temel sözdizimini ve yürütülmesini gösteren bir program oluşturun. Bu meydan okuma, parametresiz basit lambda fonksiyonlarını nasıl tanımlayacağınız ve çağıracağınız konusundaki anlayışınızı test edecektir.
Programınız şunları yapmalıdır:
Hello from Lambda!yazdıran bir lambda ifadesi oluşturun- Bu lambdayı
autoanahtar kelimesini kullanarak bir değişkende saklayın - Yürütmek için lambda fonksiyonunu çağırın
Lambda executed successfully!yazdıran ikinci bir lambda ifadesi oluşturun- Bu ikinci lambdayı bir değişkende saklamadan hemen yürütün
Aşağıdaki tam çıktı formatını kullanın:
Hello from Lambda!
Lambda executed successfully!Lambda ifadelerinin [](){} sözdizimini kullandığını unutmayın; burada köşeli parantezler [] yakalama yan tümcesidir (capture clause), parantezler () parametreleri tutar (bu meydan okuma için boştur) ve süslü parantezler {} fonksiyon gövdesini içerir. Bir lambdayı auto variableName = [](){...}; kullanarak bir değişkende saklayabilir ve ardından variableName(); ile çağırabilirsiniz. Hemen yürütme için, lambdayı tek bir ifadede tanımlayan ve çağıran [](){...}(); sözdizimini kullanabilirsiniz.
Kopya kağıdı
Lambda ifadeleri, satır içinde (inline) tanımlanabilen anonim fonksiyonlardır. Şu sözdizimini [](){} kullanırlar:
[]- yakalama ifadesi (dış değişkenlere erişimi kontrol eder)()- parametreler{}- fonksiyon gövdesi
Yaygın yakalama ifadesi formları:
[]- hiçbir şeyi yakalama[=]- tüm dış değişkenleri değere göre yakala[&]- tüm dış değişkenleri referansa göre yakala
Bir lambdayı saklama ve çağırma:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Lambda fonksiyonunu çağırBir lambdayı anında çalıştırma:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Kendin dene
#include <iostream>
using namespace std;
int main() {
// TODO: Kodunuzu aşağıya yazın
// "Hello from Lambda!" yazdıran bir lambda ifadesi oluşturun
// auto anahtar kelimesini kullanarak bir değişkende saklayın
// Lambda fonksiyonunu çağırın
// "Lambda executed successfully!" yazdıran ikinci bir lambda oluşturun
// Bir değişkende saklamadan hemen çalıştırın
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği4Map'ler (Anahtar-Değer Çiftleri)
std::map'e GirişBir Map OluşturmaDeğerlere Erişme ve DeğiştirmeAnahtar KontrolüÇiftleri KaldırmaMap Üzerinde YinelemeÖzet - Kelime Frekansı7İleri Seviye Fonksiyonlar
Referans ile GeçmeLambda İfadelerine GirişParametreli LambdalarDönüş Değeri Olan LambdalarÖzyinelemeye GirişÖzyinelemeli FaktöriyelLambda ile Sıralama2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme