Forum: Ders Arası RSS
scope ne işe yarar nasıl kullanılır ?
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: scope ne işe yarar nasıl kullanılır ?
Başlıkta yazdığım gibi scope ne işe yarar nasıl kullanılır ?
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
D'de normalde nesneler çöp toplayıcı tarafından ve ilerideki belirsiz bir zamanda sonlandırılırlar. scope, "bu nesneyi bu kapsamdan çıkarken" sonlandır demektir. (C++'da olduğu gibi.)

scope kullanmayan bir program:

import std.stdio;
 
class Öğrenci
{
    this()
    {
        writeln("Öğrenci kuruldu");
    }
 
    ~this()
    {
        writeln("Öğrenci sonlandırıldı");
    }
}
 
void foo()
{
    for (uint i = 0; i != 3; ++i) {
       auto öğrenci = new Öğrenci;
    }
}
 
void main()
{
    writeln("foo'yu çağırıyorum");
    foo();
    writeln("foo'dan dönüldü");
}

ve çıktısı:

foo'yu çağırıyorum
Öğrenci kuruldu
Öğrenci kuruldu
Öğrenci kuruldu
foo'dan dönüldü
Öğrenci sonlandırıldı
Öğrenci sonlandırıldı
Öğrenci sonlandırıldı


Yani sonlandırma işlemi, çöp toplayıcı tarafından en sona bırakılmıştır. Bazen bunu istemeyiz: örneğin bir dosya nesnesinin dosyayı kapatması gerekir...

İşte bunun için, eğer o programda öğrenci'nin tanımına scope eklenirse:

scope auto öğrenci = new Öğrenci;

artık çıktısı şöyle olur:

foo'yu çağırıyorum
Öğrenci kuruldu
Öğrenci sonlandırıldı
Öğrenci kuruldu
Öğrenci sonlandırıldı
Öğrenci kuruldu
Öğrenci sonlandırıldı
foo'dan dönüldü


Yani artık nesne C++'da olduğu gibi, for döngüsünün kapsamı sonunda sonlandırılmaktadır.

Bazen de bir türün bütün nesnelerinin böyle kapsam sonunda sonlandırılması istenir. (Örneğin Dosya gibi bir tür...) O zaman da scope sınıf tanımına eklenir:

scope class Öğrenci
{
    // ... 

Öyle yapınca, öğrenci tanımının da scope olması şart koşulur.

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 06:10:43 (UTC -08:00)