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.

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

Genel bir yöntem, 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 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

Genel yöntemler, yalnızca belirli işlemlerin tür esnekliğine ihtiyaç duyduğu durumlarda sınıflar içinde ö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 çıkarsandı
  
  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 hâle getirmeden, herhangi bir türle çalışabilen metotlara sahip bir Transformer sınıfı oluşturacaksın; bu da sana esneklik sağlayacak.

Kodunu iki dosyada düzenleyeceksin:

  • transformer.dart: Aşağıdaki genel metotlara 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 metodu farklı türlerle göster:
    • Bir Transformer örneği oluştur
    • getFirst metodunu [10, 20, 30] üzerinde kullan ve sonucu yazdır
    • getFirst metodunu ['apple', 'banana', 'cherry'] üzerinde kullan ve sonucu yazdır
    • getLast metodunu [1.5, 2.5, 3.5] üzerinde kullan ve sonucu yazdır
    • repeat metodunu kullanarak 'Hi' değerinin 4 kez tekrarlandığı bir liste oluştur ve sonucu yazdır
    • repeat metodunu kullanarak 7 değerinin 3 kez tekrarlandığı bir liste oluştur ve sonucu yazdır
    • printPair metodunu 'Name' ve 42 ile kullan
    • printPair metodunu 100 ve true ile kullan

Her metodun kendi tür parametrelerini nasıl tanımladığına dikkat et; bu, aynı Transformer nesnesinin tam tür güvenliğiyle tamsayılar, dizeler, double değerler ve boolean değerlerle çalışmasını sağlar. printPair metodu, tek bir metotta iki tür parametresinin nasıl kullanılacağını 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ş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

Kendi başına pratik yap: Online Dart derleyicisi