Parametreli Lambdalar
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 43 / 56.
Temel lambda söz dizimini anladığınıza göre, parametreler ekleyerek lambdaları daha kullanışlı hale getirelim. Tıpkı normal fonksiyonlar gibi, lambdalar da üzerinde çalışmak için girdi değerleri kabul edebilir.
Bir lambdaya parametre eklemek için, bunları yakalama ifadesinden (capture clause) sonraki parantezlerin içine yerleştirin:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Şunu yazdırır: Sum: 8Parametre sözdizimi, tıpkı normal fonksiyon parametreleri gibi çalışır - türü ve ardından parametre adını belirtirsiniz. Yukarıda gösterildiği gibi, virgülle ayrılmış birden fazla parametreye sahip olabilirsiniz.
Bir lambdayı kaydetmeden parametrelerle doğrudan çağırabilirsiniz:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Çıktı: Product: 28Parametre kabul etme yeteneği, lambdaları çok daha esnek ve yeniden kullanılabilir hale getirerek her çağrıldıklarında farklı girdi değerlerini işleyebilen küçük fonksiyonlar oluşturmanıza olanak tanır.
Görev
KolayFarklı matematiksel işlemler gerçekleştiren basit bir hesap makinesi oluşturarak, parametreli lambda ifadelerini gösteren bir program oluşturun. Bu görev, girdi değerlerini kabul eden ve onlarla çalışan lambda ifadelerini nasıl tanımlayacağınız konusundaki anlayışınızı test edecektir.
Aşağıdaki girdiler sağlanacaktır:
- Hesaplamalar için sayıları temsil eden iki tam sayı
num1venum2 - Gerçekleştirilecek matematiksel işlemi temsil eden bir karakter
operation
Programınız şunları yapmalıdır:
- İki tam sayı parametresi alan ve toplamlarını
Sum: [result]formatında yazdıranaddadında bir lambda ifadesi oluşturun - İki tam sayı parametresi alan ve farklarını
Difference: [result]formatında yazdıransubtractadında bir lambda ifadesi oluşturun - İki tam sayı parametresi alan ve çarpımlarını
Product: [result]formatında yazdıranmultiplyadında bir lambda ifadesi oluşturun - Girdiden iki sayıyı ve işlem karakterini okuyun
- İşlem karakterine bağlı olarak, iki sayı ile uygun lambdayı çağırın
İşlem karakteri şunlardan biri olacaktır:
- Toplama için
+(addlambdasını çağırın) - Çıkarma için
-(subtractlambdasını çağırın) - Çarpma için
*(multiplylambdasını çağırın)
İşleme bağlı olarak aşağıdaki tam çıktı formatını kullanın:
Toplama için:
Sum: [result]Çıkarma için:
Difference: [result]Çarpma için:
Product: [result]Lambda parametrelerinin, normal fonksiyon parametreleriyle aynı sözdizimi kullanılarak yakalama ifadesinden (capture clause) sonraki parantezlerin içinde tanımlandığını unutmayın. Her lambdayı auto anahtar kelimesini kullanarak bir değişkende saklayın, ardından bir if-else ifadesi veya switch ifadesi kullanarak girdi işlem karakterine göre uygun lambdayı çağırın.
Kopya kağıdı
Lambda ifadeleri, yakalama ifadesinden (capture clause) sonra parantez içine yerleştirerek parametre kabul edebilir:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Yazdırır: Sum: 8Parametre sözdizimi tıpkı normal fonksiyon parametreleri gibi çalışır - türü ve ardından parametre adını belirtin. Birden fazla parametre virgülle ayrılır.
Bir lambdayı saklamadan parametrelerle hemen de çağırabilirsiniz:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Yazdırır: Product: 28Kendin dene
#include <iostream>
using namespace std;
int main() {
// Girdiyi oku
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO: Toplama, çıkarma ve çarpma işlemleri için lambda ifadeleri oluşturun
// TODO: İşleme göre uygun lambdayı çağırmak için if-else veya switch ifadesi kullanı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