Extension operator
- Dart kursu
- Uzman
- Ders 21/47
- 5 dk
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
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
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
Vector operator +(____ other) => Vector(x + other.x, y + other.y);
Vector operator +(Vector other) => Vector(x + other.x, y + other.y);
Açıklama: operator +(Vector other) iki Vector'i toplar.