Menu
CoddyTech

Generic Metotlar

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

Sınıflar jenerik olabildiği gibi, tek tek metotların da kendi tür parametreleri olabilir. Bu, tüm sınıfı jenerik hâle getirmeden esnek bir metoda ihtiyaç duyduğunuzda kullanışlıdır.

Genel bir metot, tür parametresini dönüş türünden önce bildirir:

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 çoğu zaman türü argümanlardan çıkarabilir, bu nedenle türü her zaman açıkça belirtmen gerekmez:

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

Genel tür yöntemleri, yalnızca belirli işlemlerin tür esnekliğine ihtiyaç duyduğu sınıflarda özellikle kullanışlı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);  // Türü int olarak çıkarıldı
  
  var copies = printer.duplicate('Hi', 3);
  print(copies);  // [Hi, Hi, Hi]
}

Jenerik metotlar, derleme zamanındaki tür denetiminden yararlanmaya devam ederken sınıflarınızı daha basit tutarak metot düzeyinde tür güvenliği üzerinde ayrıntılı denetim sağlar.

challenge icon

Görev

Kolay

Genel yöntemlerin gücünü gösteren bir veri dönüştürme aracı oluşturalım. Tüm sınıfı genel hâle getirmeden esneklik sağlayan ve her türle çalışabilen yöntemlere sahip bir Transformer sınıfı oluşturacaksın.

Kodunu iki dosyada düzenleyeceksin:

  • transformer.dart: Aşağıdaki genel yöntemlere sahip bir Transformer sınıfı oluştur:
    • 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) - öğeyi belirtilen sayıda tekrarlayarak bir liste oluşturur
    • void printPair<A, B>(A first, B second) - iki değeri Pair: [first] and [second] biçiminde yazdırır
  • main.dart: Dönüştürücü dosyanı içe aktar ve her genel yöntemi farklı türlerle göster:
    • Bir Transformer örneği oluştur
    • getFirst yöntemini [10, 20, 30] üzerinde kullan ve sonucu yazdır
    • getFirst yöntemini ['apple', 'banana', 'cherry'] üzerinde kullan ve sonucu yazdır
    • getLast yöntemini [1.5, 2.5, 3.5] üzerinde kullan ve sonucu yazdır
    • repeat yöntemini kullanarak 'Hi' değerinin 4 kez tekrarlandığı bir liste oluştur ve sonucu yazdır
    • repeat yöntemini kullanarak 7 değerinin 3 kez tekrarlandığı bir liste oluştur ve sonucu yazdır
    • printPair yöntemini 'Name' ve 42 ile kullan
    • printPair yöntemini 100 ve true ile kullan

Her yöntemin kendi tür parametrelerini tanımlayarak aynı Transformer nesnesinin tam tür güvenliğiyle tam sayılar, dizeler, ondalıklı sayılar ve boole değerleri üzerinde çalışmasını sağladığına dikkat et. printPair yöntemi, tek bir yöntemde iki tür parametresinin nasıl kullanılabileceğini gösterir.

Beklenen çıktı:

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

Kendin dene

import 'transformer.dart';

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

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

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

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

  // TODO: 'Hi' değerinin 4 kez tekrarlandığı bir liste oluşturmak için repeat kullan ve listeyi yazdır

  // TODO: 7 değerinin 3 kez tekrarlandığı bir liste oluşturmak için repeat kullan ve listeyi yazdır

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

  // TODO: 100 ve true ile printPair kullan
}
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

Kendi başına pratik yap: Online Dart derleyicisi