Menu
Coddy logo textTech

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.

challenge icon

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.

  1. Virgüllerle ayrılmış sayıları içeren bir dize girdisi oku (ör. "1,2,3,4,5")
  2. İşlem türünü temsil eden bir dize girdisi oku ("double", "square" veya "increment")
  3. İlk girdiyi dizelerden oluşan bir listeye ayır ve her birini bir tam sayıya dönüştür
  4. Üç ayrı işlev oluştur:
    • doubleNumber - bir tam sayı alır ve onu 2 ile çarpılmış hâliyle döndürür
    • squareNumber - bir tam sayı alır ve onu kendisiyle çarpılmış hâliyle döndürür
    • incrementNumber - bir tam sayı alır ve ona 1 eklenmiş hâliyle döndürür
  5. Parametre olarak bir tam sayı listesi ve bir işlev alan processNumbers adlı bir ana işlev oluştur
  6. processNumbers işlevi, verilen işlevi listedeki her sayıya uygulamalı ve sonuçları içeren yeni bir liste döndürmelidir
  7. İşlem türü girdisine göre uygun işlevi processNumbers işlevine geçir
  8. 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 successfully

Girdiler "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 successfully

Girdiler "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 successfully

Programı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');
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Dart derleyicisi