- Yerel Değişkenler
- Biçimsel Parametreler
- Statik Değişkenler
- Global Değişkenler
- Giriş Değişkenler
- Extern Değişkenler
- Değişkenlerin Başlatılması
- Değişkenlerin Görünürlük Alanları ve Ömürleri
- Nesnelerin Oluşturulması ve Silinmesi
Nesnelerin Oluşturulması ve Silinmesi
Bir MQL5 programı çalıştırılmak için yüklendiğinde, her değişkene tipine göre bellek tahsis edilir. Erişim düzeylerine göre değişkenler global değişkenler ve yerel değişkenler olmak üzere iki türe ayrılır. Bellek sınıfına göre bunlar, bir MQL5 programının statik ve otomatik giriş parametreleri olabilirler. Her bir değişken, eğer gerekliyse karşılık gelen bir değer ile başlatılır. Değişken, kullanımının ardından sonlandırılır ve onun tarafından kullanılan bellek MQL5 yönetici sistemine verilir.
Global Değişkenlerin Başlatılması ve Sonlandırılması
Global değişkenler, bir MQL5 programının yüklenmesinin hemen ardından ve herhangi bir fonksiyon çağrılmadan önce otomatik olarak başlatılırlar. Başlatma sırasında ilk değerler basit tiplere atanır ve nesneler için –eğer varsa– bir yapıcı çağrılır. Girdi değişkenleri her zaman global düzeyde bildirilir ve program başlangıcında kullanıcı tarafından iletişim kutusunda ayarlanan değerler ile başlatılır.
Statik değişkenler genellikle yerel seviyede başlatılmalarına rağmen, bunlar için bellek önceden tahsis edilir. Global değişkenlerde olduğu gibi, başlatma işlemi programın yüklenmesinin hemen ardından gerçekleştirilir.
Başlatma sırası değişkenlerin bildirim sırasına karşılık gelir. Sonlandırma işlemi ise ters sırada gerçekleştirilir. Bu kural sadece 'new' operatörü ile oluşturulmamış değişkenler için doğrudur. Böyle değişkenler programın yüklenmesiyle oluşturulup başlatılır ve programın kaldırılmasıyla sonlandırılır.
Yerel Değişkenlerin Başlatılması ve Sonlandırılması
Yerel düzeyde başlatılan bir değişken statik değilse, değişken için otomatik olarak bellek tahsis edilir. Yerel değişkenler de tıpkı global değişkenler gibi, program yönetimi yerel değişkenin bildirimiyle karşılaştığı anda otomatik olarak başlatılırlar. Yani, başlatma sırası bildirim sırasına karşılık gelir.
Yerel değişkenler bildirildikleri program bloğunun bitiminde, bildirim sıralarının tersine göre sonlandırılır. Program bloğu bir birleşik operatördür; switch seçim operatörünün, döngü operatörlerinin (for, while, do-while), bir fonksiyon gövdesinin veya bir if-else operatörünün parçası olabilir.
Yerel değişkenler sadece program yönetimi yerel değişken bildirimiyle karşılaştığı anda başlatılırlar. Eğer programın çalıştırılması sırasında değişkenin bildirildiği blok çalıştırılmazsa, değişken de çalıştırılmaz.
Dinamik Olarak Yerleştirilmiş Nesnelerin Başlatılması ve Sonlandırılması
Nesne işaretçileri için özel bir durum söz konusudur; işaretçinin bildirimi, karşılık gelen nesnenin başlatılmasını gerektirmez. Dinamik olarak yerleştirilmiş nesneler sadece, sınıf örneği new operatörü ile oluşturuldığı zaman başlatılırlar. Nesnelerin başlatılması, karşılık gelen sınıfın bir yapıcısının çağrılmasını gerektirir. Eğer sınıf içinde karşılık gelen bir yapıcı yoksa, bu sınıfın basit tipli üyeleri otomatik olarak başlatılmayacaktır. Sınıfın dizgileri, dinamik dizileri ve nesneleri ise otomatik olarak başlatılır.
İşaretçiler global veya yerel düzeyde bildirilebilirler. Ayrıca boş değer NULL ile veya, aynı tipin yada miras tipin işaretçi değeri ile başlatılabilirler. Eğer new operatörü, yerel düzeyde bildirilmiş bir işaretçi için çağrılırsa, kapsamdan çıkmadan önce işaretçinin silinmesi için delete operatörü kullanılmalıdır. Aksi durumda işaretçi kaybolur ve nesnenin açık yolla silinmesi başarısız olur.
object_pointer=new Class_name, ifadesi ile oluşturulmuş tüm nesneler, sonradan delete(object_pointer) operatörü kullanılarak silinmelidir. Herhangi bir sebepten ötürü, böyle bir değişken delete operatörü ile silinmezse; program tamamlandığında buna karşılık gelen kayıt girdisi, "Uzmanlar" sekmesinde gözükecektir. Birkaç değişkeni bildirip, ardından hepsine tek bir sınıfın işaretçisini atamak mümkündür.
Eğer dinamik olarak oluşturulmuş bir nesne bir yapıcıya sahipse, bu yapıcı new operatörünün çalıştırılmasıyla beraber çağrılacaktır. Eğer nesne bir yıkıcıya sahipse, yapıcı, delete operatörünün çalıştırılmasıyla çağrılacaktır.
Bu şekilde dinamik olarak yerleştirilmiş nesneler, sadece new operatörü ile oluşturulacak ve delete operatörü ile (veya programın kaldırılması sırasında MQL5 yönetici sistemi tarafından otomatik olarak) silinecektir. Dinamik olarak oluşturulan nesnelerin bildirim sıraları, başlatılma sıralarını etkilemez. Başlatma ve sonlandırma sırası, tamamen programcı tarafından kontrol edilir.
MQL5 dilinde dinamik bellek tahsisi
Dinamik dizilerle çalışılırken serbest bırakılan bellek alanı hemen işletim sistemine devredilir.
new operatörü kullanarak dinamik sınıf nesneleri oluştururken, gereken bellek ilk olarak bellek yöneticisinin çalıştığı sınıf bellek havuzundan talep edilir. Eğer havuzda yeterli bellek mevcut değilse, gereken bellek alanı işletim sisteminden istenir. Bir dinamik nesnenin delete operatörü ile silinmesinin hemen ardından, serbest kalan bellek sınıf bellek havuzuna devredilir.
Bellek yöneticisi; OnInit(), OnDeinit(), OnStart(), OnTick(), OnCalculate(), OnTimer(), OnTrade(), OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit(), OnChartEvent(), OnBookEvent() olay işleme fonksiyonlarının sonlandırılmasının ardından, serbest kalan belleği işletim sistemine devreder.
Kısaca Değişken Nitelikleri
Oluşturulma ve silinme sırası, yapıcı ve yıkıcıların çağrılması gibi konularla ilgili temel bilgiler aşağıdaki tabloda verilmiştir.
Global otomatik değişken |
Yerel otomatik değişken |
Dinamik olarak oluşturulmuş nesne |
|
---|---|---|---|
Başlatma |
MQL5 programının yüklenmesinin hemen ardından |
çalıştırma esnasında, bildirildiği satıra ulaşıldığında |
new operatörünün çalıştırılmasında |
Başlatma sırası |
bildirim sırasına göre |
bildirim sırasına göre |
bildirim sırasından bağımsız |
Sonlandırma |
MQL5 programı kaldırılmadan önce |
bildirim bloğundan çıkıldığında |
delete operatörü çalıştırıldığında veya MQL5 programı kaldırıldığında |
Sonlandırma sırası |
başlatma sırasının tersine |
başlatma sırasının tersine |
başlatma sırasından bağımsız |
Yapıcı çağrısı |
MQL5 programı yüklendiğinde |
başlatılma sırasında |
new operatörünün çalıştırılmasında |
Yıkıcı çağrısı |
MQL5 programının kaldırılması sırasında |
değişkenin başlatıldığı bloktan çıkıldığında |
delete operatörünün çalıştırılmasıyla |
Hata günlükleri |
"Uzmanlar" günlüğünde, otomatik olarak oluşturulmuş bir nesnenin silinme denemesinin başlatıldığına dair günlük mesajı |
"Uzmanlar" günlüğünde, otomatik olarak oluşturulmuş bir nesnenin silinme denemesinin başlatıldığına dair günlük mesajı |
"Uzmanlar" günlüğünde, MQL5 programı kaldırılırken silinmemiş olan dinamik oluşturulmuş nesnelere dair günlük mesajı |
Ayrıca Bakınız
Veri Tipleri, Tiplerin Kapsüllenmesi ve Genişletilebilirliği, Değişkenlerin Başlatılması, Değişkenlerin Görünürlük Alanları ve Ömürleri