Dart Dilinde Operatörlere Yeni İşlevler Nasıl Yüklenebilir?

Alperen Ekin
HardwareAndro
Published in
2 min readJun 7, 2020

Method Overloading terimi nesne yönelimli diller için önemli bir konsept olarak bilinir. Java, C++ gibi programlama dillerinde aynı isimli birden fazla methoda farklı method parametreleri verilerek sağlanır. Basit bir örnek üzerinden bakacak olursak:

void foo(int a)
void foo(int a, float b)

Örnekte de görüldüğü gibi iki method arasındaki tek fark parametreler. Yani daha terimsel konuşacak olursak method imzaları farklı. Ancak Dart dili bize method overloading için imkan vermiyor. Buna rağmen operatörlere yeni işlevler kazandırmak için operatör overloading işlemini yapabilme şansımız hala var.

Dart dilinde method overloading mümkün olmamasına rağmen yine de yerine opsiyonel parametreler kullanılarak yakın bir özellik sağlanabilir.

Operatör Overloading

Bazı programlama dilleri operatörlerin(+- / gibi ) farklı veri tipleriyle kullanılmasını mümkün kılar. Dart dili de bunlardan biri olarak göze çarpıyor. Başlıktan da anlaşılabileceği üzerine Operator Overloading işlemi dildeki operatörlere yeni işlevler yüklemeye yarıyor. En büyük avantajı ise programlarınızın okunabilirliğini arttırıyor. Basit bir örnekle kullanımına bakalım:

class Calculator{
int _num1;
int _num2;
double _result=0;

Calculator(int number1,int number2){
this._num1 = number1;
this._num2 = number2;
}

Temel bir calculator sınıfımız olduğunu düşünelim. Constructor’ında iki farklı sayı alan ve bunun dışında sınıfa ait işlemlerin sonucunu tutan bir result değişkenimiz var. Normal şartlarda bu sınıftan farklı nesneler yaratıp operatörler ile işleme soksaydık sınıf üzerinden böyle bir operasyonun mümkün olmadığına dair hata alacaktık.

double operator +(Calculator calculator){
_result = _result + calculator.getResult;
return _result;
}

Ancak yukarıdaki gibi bir örnekle bu operasyonları mümkün kılabiliriz. Operator anahtar kelimesini ve overload etmek istediğimiz operatörü yazıp, devamında gerekli operasyonu gerçekleştirdik.

double newResult = Calculator1 + Calculator2

Görüldüğü üzere şimdi iki adet sınıf nesnesinin toplamı gibi işlemler mümkün. Önceden yaratıldığını kabul ettiğimiz Calculator nesnelerini topladığımızda şimdi yapılacak işlem ise yukarıda görüldüğü üzere her iki nesneye ait result değişkenlerinin toplanması ve döndürülmesi olacaktır.

Farklı operatörlerde(<, > ,==, !=gibi ) de aynı yöntem ile sonuç alınabilir. Buradaki örnek işlev olarak çok etkin olmasa bile genel mantığı kavramak için yeterli olduğunu düşünüyorum. Tabi ki “==” operatörü gibi farklı operatörler de kullanılarak iki nesnenin karşılaştırılması gibi işlemler yapılarak örnekler çoğaltılabilir.

Bugünlük bu kadar diyelim, bir sonraki yazılarda görüşmek dileğiyle 🙋‍♂️.

Kodun tamamına erişmek isterseniz:

--

--