Menu
Coddy logo textTech

Çağrılabilir Sınıflar

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

Dart'ta, call() metodunu uygulayarak bir sınıfın örneklerini fonksiyonlar gibi çağrılabilir hâle getirebilirsin. Bu, bir nesneyi fonksiyon çağrısı söz dizimiyle kullanmanı sağlar; yani parantezleri doğrudan örneğin üzerinde kullanabilirsin.

class Multiplier {
  final int factor;
  
  Multiplier(this.factor);
  
  int call(int value) {
    return value * factor;
  }
}

void main() {
  var double = Multiplier(2);
  var triple = Multiplier(3);
  
  print(double(5));   // 10 - nesneyi bir fonksiyon gibi çağırma
  print(triple(5));   // 15
}

double(5) yazdığınızda Dart, 5 değerini bağımsız değişken olarak kullanarak call() yöntemini otomatik olarak çağırır. Nesne, durumunu (factor alanını) korurken bir işlev gibi davranır.

call() yöntemi herhangi bir imzaya sahip olabilir - birden fazla parametre, isteğe bağlı parametreler ve hatta farklı türler döndürebilir:

class Greeter {
  final String greeting;
  
  Greeter(this.greeting);
  
  String call(String name, {String punctuation = '!'}) {
    return '$greeting, $name$punctuation';
  }
}

void main() {
  var hello = Greeter('Hello');
  print(hello('Alice'));              // Hello, Alice!
  print(hello('Bob', punctuation: '.')); // Hello, Bob.
}

Çağrılabilir sınıflar, durum veya yapılandırmayla birleştirilmiş işlev benzeri davranışa ihtiyaç duyduğunuzda kullanışlıdır. Genellikle çağrılar arasında ayarları hatırlaması gereken yeniden kullanılabilir işlemler, doğrulayıcılar veya dönüşümler oluşturmak için kullanılırlar.

challenge icon

Görev

Kolay

Çağrılabilir sınıfları kullanarak bir metin biçimlendirici sistemi oluşturalım! Metni farklı şekillerde dönüştürmek için işlevler gibi çağrılabilen ve kendi yapılandırma ayarlarını koruyan nesneler oluşturacaksın.

Kodunu iki dosyada düzenleyeceksin:

  • formatters.dart: Metni dönüştüren iki çağrılabilir sınıf oluştur:
    • Metni bir ön ek ve son ek ile saran bir Wrapper sınıfı. Bu sınıf bir String prefix ve String suffix saklamalı ve String text parametresiyle çağrıldığında, metni ön ek ile son ek arasına sarılmış şekilde döndürmelidir.
    • Metni belirli sayıda tekrarlayan bir Repeater sınıfı. Bu sınıf bir int times değeri saklamalı ve String text parametresiyle çağrıldığında, metni her tekrarın arasında bir boşluk olacak şekilde belirtilen sayıda tekrarlamalıdır.
  • main.dart: Biçimlendiricilerini içe aktar ve çağrılabilir sınıfların nasıl çalıştığını göster:
    • Wrapper ön eki ve "[" son ekiyle bir "]" oluştur
    • Wrapper ön eki ve "***" son ekiyle başka bir "***" oluştur
    • 3 kez tekrarlayan bir Repeater oluştur
    • İlk sarmalayıcıyı "Hello" ile çağır ve sonucu yazdır
    • İkinci sarmalayıcıyı "Important" ile çağır ve sonucu yazdır
    • Tekrarlayıcıyı "Go" ile çağır ve sonucu yazdır
    • Son olarak bunları birleştir: ilk sarmalayıcıyı, tekrarlayıcının "Dart" ile çağrılmasının sonucuyla çağır ve sonucu yazdır

Her biçimlendirici nesnesinin kendi yapılandırmasını nasıl hatırladığına ve tıpkı bir işlev gibi doğrudan parantezlerle çağrılabildiğine dikkat et!

Beklenen çıktı:

[Hello]
***Important***
Go Go Go
[Dart Dart Dart]

Kendin dene

import 'formatters.dart';

void main() {
  // TODO: "[" öneki ve "]" soneki ile bir Wrapper oluştur
  
  // TODO: "***" öneki ve "***" soneki ile başka bir Wrapper oluştur
  
  // TODO: 3 kez tekrarlayan bir Repeater oluştur
  
  // TODO: İlk wrapper'ı "Hello" ile çağır ve sonucu yazdır
  
  // TODO: İkinci wrapper'ı "Important" ile çağır ve sonucu yazdır
  
  // TODO: Repeater'ı "Go" ile çağır ve sonucu yazdır
  
  // TODO: Bunları birleştir: ilk wrapper'ı şunun sonucuyla çağır
  // repeater'ı "Dart" ile çağırarak, ve sonucu yazdır
  
}
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