CodeBlanks Logo Icon CodeBlanks

Extension operator

Extension operator aşırı yükleme öğrenirsin.

Extension operator

Extension operator, bir extension içinde operatör aşırı yükleme (overloading) yapmaktır. extension VectorOps on Vector { Vector operator +(Vector other) => ... } tanımı, + operatörünü Vector için yeniden tanımlar.

Operatör aşırı yükleme, doğal sözdizimi ile özel işlemler yapmayı sağlar: v1 + v2 iki Vector'ü toplar. Dart, + - * / == < > gibi birçok operatörün aşırı yüklenmesine izin verir. Her operatörün sabit bir imzası vardır.

Operatör ilkeleri

Dart'ta her operatörün sabit bir imzası vardır. operator + tek parametre alır ve dönüş türü serbesttir. operator == bool döndürmek zorundadır ve mümkünse hashCode ile tutarlı olmalıdır.

Bazı operatörler aşırı yüklenemez: =, !, ??, ., ~/ (aslında ~/= hariç). operator [] ve operator []= indeksleme için kullanılır. Mantıksal operatörler (&&, ||) aşırı yüklenemez.

Uygulama Vector + operator

Bir Vector sınıfı tanımla: final int x; final int y; const Vector(this.x, this.y); alan ve kurucu. Bir VectorOps extension'ı tanımla: on Vector olsun ve Vector operator +(Vector other) => Vector(x + other.x, y + other.y); metodu içersin. main içinde final v = Vector(1, 2) + Vector(3, 4); yarat; print('${v.x},${v.y}'); ile yazdır.

Başlangıç kodu

main.dart
void main() {
  // Vector sınıfını ve VectorOps extension'ını tanımla
  // Vector(1,2) + Vector(3,4) sonuçunu yazdır
}

Örnek çözüm

main.dart
class Vector {
  final int x;
  final int y;
  const Vector(this.x, this.y);
}

extension VectorOps on Vector {
  Vector operator +(Vector other) => Vector(x + other.x, y + other.y);
}

void main() {
  final v = Vector(1, 2) + Vector(3, 4);
  print('${v.x},${v.y}');
}

Beklenen çıktı

4,6

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Operatörleri eşleştir

Kavram Anlamı
operator + Toplama
operator == Eşitlik
operator < Küçüktür
operator * Çarpma

2 operator == ne döndürmek zorundadır?

  • int
  • bool Doğru cevap
  • String
  • void

Açıklama: operator == bool döndürmek zorundadır.

3 operator + bildirimi

Soru
Vector operator +(____ other) => Vector(x + other.x, y + other.y);
Cevap
Vector operator +(Vector other) => Vector(x + other.x, y + other.y);

Açıklama: operator +(Vector other) iki Vector'i toplar.

Uzman bölümündeki tüm dersler