MQL5'te birlikte öğrenme ve yazma - sayfa 32

 

Şey, bilmiyorum :) gibi yazılı kod için ofisimizde

std:: string s = "" ;

en azından azarlayacaklar ve IMHO, doğru olanı yapacaklar.

Tekrar ediyorum - bu, bir dizenin başlatılması gerekiyorsa, oluşturma sırasında doğru başlatma gerektiren karmaşık bir türdür - bu kesinlikle bir MT5 (4) hatasıdır.

Yine de dizilerin boyutu oluşturulduktan hemen sonra sıfırlanabilir mi ???

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
TheXpert :

Şey, bilmiyorum :) gibi yazılı kod için ofisimizde

en azından azarlayacaklar ve IMHO, doğru olanı yapacaklar.

Bir değişken kullanılmadan önce, ona bir değer atanmalıdır (açıkça başlatılmıştır). Yoksa aynı fikirde değil misiniz?

Açık başlatma, bildirim anında hemen birine ihtiyaç duyulduğu anlamına gelmez. Ancak daha sonra bazı hesaplamalarda başlatılmamış bir değişkenin değeri kullanılırsa, sonuçlar tahmin edilemez.

 

Tüm saygımla, beni korkutuyorsun Rashid.

Sınıf, mantıksal ise varsayılan değerin ayarlanması da dahil olmak üzere, nesnenin ilk başlatılmasının gerçekleştiği bir kurucuya sahiptir.

Başlatma gerçekleşmezse, nesnenin uygun durumda olup olmadığını bilmenin bir yolu olmalıdır. Bir dize ile varsayılan bir değer belirlemek çok daha mantıklıdır.

std:: string s = "" ;

böyle bir kayıt paranoyadır, bir paranoyak a priori normal kod yazamaz.

Yani dizeler başlatılmadı mı?

 
TheXpert :
Yani dizeler başlatılmadı mı?
Tabii ki, başlatılırlar, ancak boş "" dizesine değil, NULL'a.
 
TheXpert :

Tüm saygımla, beni korkutuyorsun Rashid.

Sınıf, mantıksal ise varsayılan değerin ayarlanması da dahil olmak üzere, nesnenin ilk başlatılmasının gerçekleştiği bir kurucuya sahiptir.

Başlatma gerçekleşmezse, nesnenin uygun durumda olup olmadığını bilmenin bir yolu olmalıdır. Bir dize ile varsayılan bir değer belirlemek çok daha mantıklıdır.

böyle bir kayıt paranoyadır, bir paranoyak a priori normal kod yazamaz.

Yani dizeler başlatılmadı mı?

Yardımı okuyun - https://www.mql5.com/en/docs/basis/types/classes :

Yapı, string türünde değişkenler ve/veya bir dinamik dizi nesnesi içeriyorsa, o zaman derleyici, string türünün yapısının tüm üyelerinin sıfıra ayarlandığı ve doğru başlatmanın gerçekleştirildiği böyle bir yapı için örtük bir kurucu atar. dinamik dizi nesnesi.

...

Yapıcılar ve yıkıcılar

Yapıcı, bir yapı veya sınıfın nesnesi oluşturulduğunda otomatik olarak çağrılan ve genellikle sınıf üyelerini başlatmak için kullanılan özel bir işlevdir. Aşağıda sadece sınıflardan bahsedeceğiz ve aksi belirtilmedikçe söylenen her şey yapılar için geçerlidir. Yapıcının adı, sınıfın adıyla eşleşmelidir. Yapıcının dönüş tipi yoktur (bir void tipi belirtebilirsiniz).

Sınıfın belirli üyeleri - stringler , dinamik diziler ve başlatma gerektiren nesneler - bir kurucunun varlığından bağımsız olarak yine de başlatılacaktır.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

Kalay ... En azından ben bileceğim.

Yapılarda da NULL olacak mı?

 
TheXpert :

Kalay ... En azından ben bileceğim.

Yapılarda da NULL olacak mı?

Sadece NULL ile karşılaştırın ve kendiniz öğrenin - Void tipi ve NULL sabiti :

Önceden tanımlanmış const değişkeni NULL , void türündedir . Herhangi bir temel türdeki değişkenlere dönüştürme yapılmadan atanabilir. Temel türdeki değişkenleri NULL değeriyle karşılaştırmaya da izin verilir.

Misal:

//--- dize başlatılmamışsa, ona önceden tanımlanmış değerimizi atayın
if (some_string== NULL ) some_string= "boş" ;

NULL , yeni işleçle oluşturulan nesnelere yönelik işaretçilerle de karşılaştırılabilir .

 
Rosh :

Bir değişken kullanılmadan önce, ona bir değer atanmalıdır (açıkça başlatılmıştır). Yoksa aynı fikirde değil misiniz?

Açık başlatma, bildirim anında hemen birine ihtiyaç duyulduğu anlamına gelmez. Ancak daha sonra bazı hesaplamalarda başlatılmamış bir değişkenin değeri kullanılırsa, sonuçlar tahmin edilemez.

Kuşlardan bahsetmişken.

 //Struct StrMQL4_Deal
struct StrMQL4_Deal
{
//----------------------------------------------------------------------------//
double TP = 0 ;
double SL = 0 ;
//----------------------------------------------------------------------------//
};

Peki derleyici bize ne söyleyecek? Ve şuna cevap verecek - '=' - yasadışı atama kullanımı

 //Class CMqlExpert
class CMqlExpert
//Purpose: Main class of trade system. 
{
//----------------------------------------------------------------------------//
protected :
//****************************************************************************//
//                    Protected declarations of the class                     //
//****************************************************************************//
bool TradeMonday    = true ; //Trade in monday
bool TradeTuesday   = true ; //Trade in tuesday
bool TradeWednesday = true ; //Trade in wednesday
bool TradeThursday  = true ; //Trade in thursday
bool TradeFriday    = true ; //Trade in friday
//----------------------------------------------------------------------------//
public :

Derleyici eğimli değildi - '=' - yasadışı atama kullanımı.

Sorum şu: Programcı (bu durumda, ben) değişkenleri kullanılmadan önce başlatmaya özen göstermezse (derleyicinin gerektirdiği gibi davranır ve yapıcıda bu anı kaçırırsa) ne olur?


 
Interesting :

Sorum şu: Programcı (bu durumda, ben) değişkenleri kullanılmadan önce başlatmaya özen göstermezse (derleyicinin gerektirdiği gibi davranır ve yapıcıda bu anı kaçırırsa) ne olur?

Soru bir acemiden geliyor...
 
sergeev :
Soru bir acemiden geliyor...

Valla ben de o zamanlar öyle düşünmüştüm (Uzun zaman önceydi, hatırladım) ama şevkle bir uygulama yazmak istedim. :)

Yine de derleyici düzeyinde değişkenleri hemen başlatmanın neden yasak olduğunu anlamış değilim.

Neden: