Menu
Coddy logo textTech

Generic Metotlar

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 66 / 110.

Tıpkı sınıfların generic olabileceği gibi, bireysel metotlar da kendi tür parametrelerine sahip olabilir. Bu, tüm sınıfı generic yapmadan esnek bir metoda ihtiyaç duyduğunuzda kullanışlıdır.

Generic bir metot, tür parametresini dönüş türünden önce tanımlar:

T findFirst<T>(List<T> items) {
  return items.first;
}

void main() {
  var firstNumber = findFirst<int>([1, 2, 3]);
  var firstWord = findFirst<String>(['hello', 'world']);
  
  print(firstNumber);  // 1
  print(firstWord);    // hello
}

Dart genellikle türü argümanlardan çıkarabilir, bu nedenle her zaman açıkça belirtmeniz gerekmez:

var result = findFirst([10, 20, 30]);  // Dart int türünü çıkarır

Generic metotlar, yalnızca belirli işlemler tip esnekliğine ihtiyaç duyduğunda sınıfların içinde özellikle yararlıdır:

class Printer {
  void printItem<T>(T item) {
    print('Printing: $item');
  }
  
  List<T> duplicate<T>(T item, int count) {
    return List.filled(count, item);
  }
}

void main() {
  var printer = Printer();
  printer.printItem<String>('Hello');
  printer.printItem(42);  // Tip int olarak çıkarımlandı
  
  var copies = printer.duplicate('Hi', 3);
  print(copies);  // [Hi, Hi, Hi]
}

Jenerik metotlar, sınıflarınızı daha basit tutarken derleme zamanı tip denetiminden yararlanmaya devam etmenizi sağlar ve metot seviyesinde tip güvenliği üzerinde hassas kontrol sunar.

challenge icon

Görev

Kolay

Genel metotların gücünü sergileyen bir veri dönüştürme yardımcı programı oluşturalım. Tüm sınıfı genel (generic) yapmadan size esneklik sağlayan, her türle çalışabilen metotlara sahip bir Transformer sınıfı oluşturacaksınız.

Kodunuzu iki dosyada düzenleyeceksiniz:

  • transformer.dart: Şu genel metotlara sahip bir Transformer sınıfı oluşturun:
    • T getFirst<T>(List<T> items) - bir listedeki ilk öğeyi döndürür
    • T getLast<T>(List<T> items) - bir listedeki son öğeyi döndürür
    • List<T> repeat<T>(T item, int times) - belirtilen sayıda tekrarlanan öğeyi içeren bir liste oluşturur
    • void printPair<A, B>(A first, B second) - iki değeri Pair: [first] and [second] formatında yazdırır
  • main.dart: Transformer dosyanızı içe aktarın ve her bir genel metodu farklı türlerle gösterin:
    • Bir Transformer örneği oluşturun
    • [10, 20, 30] üzerinde getFirst kullanın ve sonucu yazdırın
    • ['apple', 'banana', 'cherry'] üzerinde getFirst kullanın ve sonucu yazdırın
    • [1.5, 2.5, 3.5] üzerinde getLast kullanın ve sonucu yazdırın
    • 4 kez tekrarlanan 'Hi' listesi oluşturmak için repeat kullanın ve sonucu yazdırın
    • 3 kez tekrarlanan 7 listesi oluşturmak için repeat kullanın ve sonucu yazdırın
    • 'Name' ve 42 ile printPair kullanın
    • 100 ve true ile printPair kullanın

Her metodun kendi tür parametrelerini nasıl bildirdiğine dikkat edin; bu, aynı Transformer nesnesinin tam tür güvenliği ile tam sayılar, dizeler, double'lar ve boolean'larla çalışmasına olanak tanır. printPair metodu, tek bir metotta iki tür parametresinin kullanımını gösterir.

Beklenen çıktı:

10
apple
3.5
[Hi, Hi, Hi, Hi]
[7, 7, 7]
Pair: Name and 42
Pair: 100 and true

Kopya kağıdı

Genel (generic) metotlar, dönüş tipinden önce tip parametreleri bildirerek, tüm sınıfı genel yapmadan bireysel metotların esnek olmasını sağlar:

T findFirst<T>(List<T> items) {
  return items.first;
}

Dart, tipi argümanlardan çıkarabilir, bu nedenle açıkça tip belirtmek isteğe bağlıdır:

var result = findFirst([10, 20, 30]);  // Dart infers int

Genel metotlar, genel olmayan sınıfların içinde kullanılabilir:

class Printer {
  void printItem<T>(T item) {
    print('Printing: $item');
  }
  
  List<T> duplicate<T>(T item, int count) {
    return List.filled(count, item);
  }
}

Metotlar birden fazla tip parametresi bildirebilir:

void printPair<A, B>(A first, B second) {
  print('Pair: $first and $second');
}

Kendin dene

import 'transformer.dart';

void main() {
  // Bir Transformer örneği oluşturun
  var transformer = Transformer();

  // TODO: [10, 20, 30] üzerinde getFirst kullanın ve sonucu yazdırın

  // TODO: ['apple', 'banana', 'cherry'] üzerinde getFirst kullanın ve sonucu yazdırın

  // TODO: [1.5, 2.5, 3.5] üzerinde getLast kullanın ve sonucu yazdırın

  // TODO: 4 kez tekrarlanan 'Hi' listesi oluşturmak için repeat kullanın ve bunu yazdırın

  // TODO: 3 kez tekrarlanan 7 listesi oluşturmak için repeat kullanın ve bunu yazdırın

  // TODO: 'Name' ve 42 ile printPair kullanın

  // TODO: 100 ve true ile printPair kullanın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler