On Thursday, 31 March 2022 at 12:09:17 UTC, Ferhat Kurtulmuş wrote:
> Herkese selamlar, karşılaştığım bazı kodlarda overload edilen fonksiyonların önünde nokta karakteri görüyorum. Belki de overload ile alakası da olmayabilir. [...]
Bence override veya overload ile alakası yok. Hani en iyi programcı en tembel olanıdır ya. Basitçe yapılan neciz ama tehlikeli çözüm çünkü gözden kaçar. Oradaki nokta dıştaki veya başka module bağla demek. Tıpkı change directory (cd..) komutu gibi. Kısaca bir önceki kapsama bak demek.
Örneğin bir sınıfın içinden başka bir nesneye örneğin string döndüren isim() işlevine sadece bir nokta koyarak ulaşabiliriz. Hatta dur, 2 modülümüz olsun daha etkileyici bir örnek olacak:
// main()'i içeren ilk modül:
module ana;
class Foo {
string isim() {
return "Foo Class";
}
override string toString() {
return .isim;
}
import std.stdio, adi.d;
void main() {
auto foo = new Foo();
foo.writeln; // ÇIKTI: Bar Struct
}
// isim() işlevini içeren modül:
module adi;
struct Bar {
string adı = "Bar Struct";
}
string isim() {
Bar bar;
return bar.adı;
}
Eğer dmd -run main.d -oftest adi.d
şeklinde çalıştırılırsa (yukardaki kodlarda hatalar olabilir çünkü derlemeden yazdım) ekranda Foo değil Bar yazacak çünkü kapsam dışında isim() işlevini arayacak. En sonunda bulamazsa hata verecek.
Dilersek legal görülmesi için başına ekleme yapıp this.isim
yazarak sınıf içindeki işleve ulaşması sağlanabilir ya da modül yerine aynı isimdeki işlev main dışında bir yerde de olabilir. Özetle nokta koyarak önceki kapsama ulaşılıyor.
Başarılar...