Fonksiyonları Argüman Olarak Aktarma
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 45 / 65.
Programlamada, işlevler sayılar veya dizeler gibi basit değerleri kabul etmekten daha fazlasını yapabilir; parametre olarak başka işlevleri de kabul edebilirler. Bu güçlü kavrama yüksek dereceli işlev adı verilir ve esnek, yeniden kullanılabilir kod yazmak için yepyeni yollar sunar.
Bir fonksiyonu argüman olarak geçirdiğinizde, aslında başka bir fonksiyona hangi işlemin gerçekleştirileceğine karar verme yeteneği vermiş olursunuz. Bunu, birine bir araç verip onu farklı malzemeler üzerinde nasıl kullanacağını seçmesine izin vermek gibi düşünün.
void processNumbers(List<int> numbers, Function operation) {
for (int number in numbers) {
operation(number);
}
}Bu örnekte, processNumbers parametre olarak bir liste ve bir fonksiyon alır. operation fonksiyon parametresi, bir tam sayı kabul eden herhangi bir fonksiyon olabilir. Bu, sayıları yazdıran, onları ikiye katlayan veya ihtiyacınız olan başka herhangi bir işlemi gerçekleştiren bir fonksiyon geçirebileceğiniz anlamına gelir.
Bu yaklaşım kodunuzu inanılmaz derecede esnek hale getirir; her olası işlem için ayrı fonksiyonlar yazmak yerine, işlemleri parametre olarak kabul ederek birçok farklı işlemle çalışabilen tek bir fonksiyon yazarsınız.
Görev
Kolayİşlevleri bağımsız değişken olarak geçirmeyi, esnek bir sayı işlemcisi oluşturarak gösteren bir program oluştur. Programın farklı işleme işlevleri oluşturması ve bunları, işlemi bir sayı listesine uygulayan ana işlemci işlevine geçirmesi gerekir.
- Virgüllerle ayrılmış sayıları içeren bir dize girdisi oku (ör.
"1,2,3,4,5") - İşlem türünü temsil eden bir dize girdisi oku (
"double","square"veya"increment") - İlk girdiyi dizelerden oluşan bir listeye ayır ve her birini bir tam sayıya dönüştür
- Üç ayrı işlev oluştur:
doubleNumber- bir tam sayı alır ve onu 2 ile çarpılmış hâliyle döndürürsquareNumber- bir tam sayı alır ve onu kendisiyle çarpılmış hâliyle döndürürincrementNumber- bir tam sayı alır ve ona 1 eklenmiş hâliyle döndürür- Parametre olarak bir tam sayı listesi ve bir işlev alan
processNumbersadlı bir ana işlev oluştur processNumbersişlevi, verilen işlevi listedeki her sayıya uygulamalı ve sonuçları içeren yeni bir liste döndürmelidir- İşlem türü girdisine göre uygun işlevi
processNumbersişlevine geçir - Sonuçları aşağıda gösterilen tam biçimde görüntüle
Örneğin girdiler "2,4,6,8" ve "double" ise programın çıktısı şöyle olmalıdır:
Number Processor
================
Original numbers: [2, 4, 6, 8]
Operation: double
Processing numbers...
Result: [4, 8, 12, 16]
Operation completed successfullyGirdiler "3,5,7" ve "square" ise programın çıktısı şöyle olmalıdır:
Number Processor
================
Original numbers: [3, 5, 7]
Operation: square
Processing numbers...
Result: [9, 25, 49]
Operation completed successfullyGirdiler "10,20,30" ve "increment" ise programın çıktısı şöyle olmalıdır:
Number Processor
================
Original numbers: [10, 20, 30]
Operation: increment
Processing numbers...
Result: [11, 21, 31]
Operation completed successfullyProgramın, üç işlem işlevinden birini processNumbers işlevine bağımsız değişken olarak geçirerek üst düzey işlevler kavramını göstermesi gerekir. İşlem türü girdisine göre hangi işlevin geçirileceğini belirlemek için koşullu ifadeler kullan. processNumbers işlevi, girdi listesinde yineleme yapmalı, verilen işlevi her elemana uygulamalı ve sonuçları yeni bir listede toplamalıdır.
Kendin dene
import 'dart:io';
void main() {
// Girişi oku
String? numbersInput = stdin.readLineSync();
String? operation = stdin.readLineSync();
// Dize girişini tam sayı listesine dönüştür
List<int> numbers = numbersInput!.split(',').map((e) => int.parse(e.trim())).toList();
// TODO: Üç işlem fonksiyonunu oluştur (doubleNumber, squareNumber, incrementNumber)
// TODO: Parametre olarak bir liste ve bir fonksiyon alan processNumbers fonksiyonunu oluştur
// TODO: İşlem türüne göre hangi fonksiyonun iletileceğini belirlemek için koşullu ifadeler kullan
// TODO: Uygun fonksiyonla processNumbers'ı çağır ve sonucu sakla
// Sonuçları istenen formatta yazdır
print('Number Processor');
print('================');
print('Original numbers: $numbers');
print('Operation: $operation');
print('Processing numbers...');
// TODO: Sonuç listesini burada yazdır
print('Operation completed successfully');
}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İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli ListesiKendi başına pratik yap: Online Dart derleyicisi