Diğer işlemler

İndisleme ( [] )

Dizinin i-inci elemanı adreslenirken ifade değeri 'i' numaralı değişkenin değeridir.

Örnek:

array[i] = 3// 3 değerini i-inci dizi elemanına ata.

Dizi indisleri sadece tamsayı olabilir. Dizilerde dört boyut ve aşağısına izin verilir. Her boyut, 0 'dan "boyut büyüklüğü-1" değerine kadar indislenir. Örneğin, 50 elemanlı tek boyutlu bir dizi için ilk elemana yapılan referans 'dizi[0]' şeklinde, son elemana yapılan referans ise 'dizi[49]' şeklinde yazılır.

Dizi büyüklüğünün ötesine adresleme yapıldığında, yürütme alt sistemi bir hata oluşturur ve program durur.

x1, x2 ,..., xn Argümanlarına Sahip Fonksiyonun Çağrılması

Her argüman bir sabiti, bir değişkeni veya bir ifadeyi temsil edebilir. Geçirilen argümanlar virgüllerle ayrılmalı ve parantezler içinde olmalıdır, açılan parantez çağrılan fonksiyonun isminden sonra gelmelidir.

İfade değeri fonksiyon tarafından dönüş yapılan değerdir. Eğer fonksiyonun dönüş tipi 'void' ise, bu fonksiyon atama işleminde sağ tarafa yerleştirilemez. x1,..., xn ifadelerinin tam olarak bu sırayla çalıştırıldığını lütfen not edin.

Örnek:

   int length=1000000;   
   string a="a",b="b",c;
//---Diğer işlemler
   int start=GetTickCount(),stop;
   long i;
   for(i=0;i<length;i++)
     {
      c=a+b;
     }
   stop=GetTickCount();
   Print("'c = a + b' için zaman = ",(stop-start)," milisaniye, i = ",i);

Virgül İşlemi ( , )

Virgül ile ayrılmış ifadeler soldan sağa doğru çalıştırılırlar. Soldaki ifadenin hesabının tüm etkileri sağdaki ifade çalıştırılmadan görülebilir. Sonuç tipi ve değeri sağdaki ifadenin tip ve değeriyle örtüşür. Geçirilecek parametrelerin listesi (yukarıya bakın) örnek olarak gösterilebilir.

Örnek:

for(i=0,j=99; i<100; i++,j--) Print(array[i][j]);

Nokta İşlemi ( . ) #

Yapı ve sınıfların genele açık üyelerine doğrudan erişim (public üyelere erişim) sağlamak için nokta işlemi kullanılır. Sözdizim:

Yapı_tipi_degiskeninin_ismi.Üye_ismi

Örnek:

   struct SessionTime
     {
      string sessionName;
      int    startHour;
      int    startMinutes;
      int    endHour;
      int    endMinutes;
     } st;
   st.sessionName="Asya";
   st.startHour=0;
   st.startMinutes=0;
   st.endHour=9;
   st.endMinutes=0;

Kapsam Çözünürlüğü İşlemi ( :: ) #

Her fonksiyon mql5 içinde kendi çalışma kapsamına sahiptir. Örneğin, Print() sistem fonksiyonu global kapsamda çalıştırılır. İçe aktarılmış fonksiyonlar, ilgili içe aktarım kapsamında çağrılır. Sınıf yöntemleri ilgili sınıfın kapsamına sahiptir. Kapsam çözünürlük işlemi için sözdizim şu şekildedir:

[Kapsam_ismi]::Fonksiyon_ismi(parametreler)

Eğer kapsam ismi yoksa fonksiyon global kapsamda aranır. Eğer hiç kapsam çözünürlük işlemi yoksa fonksiyon en yakın kapsamda aranır. Eğer yerel kapsamda hiç fonksiyon yoksa arama global kapsama yöneltilir.

Kapsam çözünürlük işlemi sınıf fonksiyonunu tanımlamak için de kullanılır.

tip Sınıf_ismi::Fonksiyon_ismi(parametre_açıklaması)
   {
// fonksiyon gövdesi
   }

Aynı isme ve farklı uygulama içeriklerine sahip olan fonksiyonların aynı program üzerinde çalıştırılması belirsizlik oluşturur. Açık kapsam özellikleri olmadan yapılan fonksiyon çağrılarının sıralama önceliği şu şekildedir:

  1. Sınıf yöntemleri. Belirtilen isimde bir fonksiyon sınıf bünyesinde yoksa sonraki aşamaya geç.
  2. MQL5 foksiyonları. Kullanılan dil böyle bir fonksiyon içermiyorsa sonraki aşamaya geç.
  3. Kullanıcı tanımlı global fonksiyonlar. Belirtilen isimde bir fonksiyon bulunmuyorsa sonraki aşamaya geç.
  4. İçe-aktarılan fonksiyonlar. Belirtilen isimde bir fonksiyon bulunmuyorsa, derleyici hata dönüşü yapacaktır.

Fonksiyon çağrılarında belirsizliği önlemek için, kapsam çözünürlüğü işlemini kullanarak fonksiyonun kapsamını açık bir şekilde belirtin.

 

Örnek:

#property script_show_inputs
#import "kernel32.dll"
   int GetLastError(void);
#import
 
class CCheckContext
  {
   int         m_id;
public:
               CCheckContext() { m_id=1234; }
protected:
   int         GetLastError() { return(m_id); }
  };
class CCheckContext2 : public CCheckContext
  {
   int         m_id2;
public:
               CCheckContext2() { m_id2=5678; }
   void        Print();
protected:
   int         GetLastError() { return(m_id2); }
  };
void CCheckContext2::Print()
  {
   ::Print("Terminal GetLastError",::GetLastError());
   ::Print("kernel32 GetLastError",kernel32::GetLastError());
   ::Print("ebeveyn GetLastError",CCheckContext::GetLastError());
   ::Print("bizim GetLastError",GetLastError());
  }  
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   CCheckContext2 test;
   test.Print();
  }
//+------------------------------------------------------------------+

Veri Tipinin Büyüklüğün Alınması veya Herhangi bir Veri Tipi Nesnesinin Büyüklüğü ( sizeof ) #

sizeof işlemi ile bir tanımlayıcıya veya bir veri tipine karşılık gelen bellek büyüklüğü alınabilir. sizeof işlemi aşağıda gösterilmiştir:

Örnek:

sizeof(ifade)

Her tanımlayıcı veya parantez içine iliştirilmiş her tip ismi buradaki ifadenin yerine kullanılabilir. Void tip isminin kullanılamayacağı, tanımlayıcının bit alanına ait olamayacağı veya tanımlayıcının bir fonksiyon ismi olamayacağı bilgileri not edilmelidir.

Eğer ifade bir statik dizinin ismi ise (yani birinci boyut veri ise) sonuç tüm dizinin büyüklüğü olacaktır (yani elemanların sayısı ile tip uzunluğunun çarpımı). Eğer ifade bir dinamik dizinin ismi ise (ve ilk boyut belirtilmemişse) sonuç dinamik dizi nesnesinin büyüklüğü olacaktır.

İşlem bir yapı veya sınıf tipine veya bunların tanıtıcılarına uygulandığında, sonuç bu yapı veya sınıfın gerçek büyüklüğü olacaktır.

Örnek:

   struct myStruct
     {
      char   h;
      int    b;
      double f;
     } str;
   Print("sizeof(str) = ",sizeof(str));
   Print("sizeof(myStruct) = ",sizeof(myStruct));   

Büyüklük değeri derleme aşamasında hesaplanır.

Ayrıca bakınız

Öncelik Kuralları