OOP, mql5'te şablonlar ve makrolar, incelikler ve kullanım teknikleri - sayfa 3

 
Алексей Тарабанов :

Onu yaratmanın bir yolunu buldun.

Bir şeyi karıştırıyorsun.
 
Ilya Malev :

Bu sınıfın en az 1 örneği oluşturulmadan önce başlatma aşamasında bir sınıf statik alanı kullanmaya çalışıyorsunuz. Bana göre bu bir sapkınlık... İşte her şey yolunda gidiyor:

Kapsülleme ilkesi genellikle bu tür alanların herkese açık değil özel olması gerektiğini önerir.

Statik alan, sınıfın örneklerinin varlığına bağlı olmamak için statik bir alandır. Ancak önce sınıfın bir örneğini oluşturmak istiyorsanız - tamam, oluşturun, ancak yalnızca işlevin içinde. Ve ondan bu alanı isteyin (en azından doğrudan, en azından bir yöntemle) - sonuç yine aynı olacaktır.

 
Alexey Navoykov :
Bir şeyi karıştırıyorsun.

Hayır, hiçbir şeyi karıştırmıyorum.

Önce global değişkenler, sonra statik değişkenler, sonra kodda göründükleri gibi yerel değişkenler.

Değişkenlerin işlevler tarafından başlatılmasını önlemek için belgelerin önerisini ihlal eden bu örnektir. Geliştiriciler için böyle bir uyarı yazmak, nerede mümkün olduğunu ve nerede imkansız olduğunu açıklamaktan daha kolaydı.

Statiği örneğinizden kaldırın ve istediğiniz sonucu alın.

 
Алексей Тарабанов :

Hayır, hiçbir şeyi karıştırmıyorum.

Önce global değişkenler, sonra statik değişkenler, sonra kodda göründükleri gibi yerel değişkenler.

Değişkenlerin işlevler tarafından başlatılmasını önlemek için belgelerin önerisini ihlal eden bu örnektir. Geliştiriciler için böyle bir uyarı yazmak, nerede mümkün olduğunu ve nerede imkansız olduğunu açıklamaktan daha kolaydı.

Örneğinizden statiği kaldırın ve istediğiniz sonucu alın.

"Belgelerin tavsiyesi")) Seninle dalga geçiyorum. Hala özü anlamadın mı? Dilde hata. Geliştiricilerin kendileri bunun hakkında konuşur ve size bu hatayla karşılaşmamak için teflerle nasıl düzgün dans edeceğinizi açıklar. Bunu, bu hatayı bir kez ve herkes için unutacak şekilde yaptım.
 
Alexey Navoykov :

Gerekli değil, ama benim için daha uygun. Bu bir sabitse (ve genel görünürlükte, kod okuryazarsa çoğunlukla sabitler bildirilir), o zaman burada başka seçenek yoktur.

Sarı ile vurgulanan her şey için tek bir sorum var: NEDEN? Sorunun nasıl çözüleceğini zaten buldum.

SONRA, zaten yığdığınız o bahçeyi çitle çevirmemek için.

 
Alexey Navoykov :
"Belge önerisi")) Seninle dalga geçiyorum. Hala özü anlamadın mı? Dilde hata. Geliştiricilerin kendileri bunun hakkında konuşur ve size bu hatayla karşılaşmamak için teflerle nasıl düzgün dans edeceğinizi açıklar. Bunu, bu hatayı bir kez ve herkes için unutacak şekilde yaptım.

Bir işlevi olan bir şeyin değerini başlatamazsınız. Gerçekten istesen bile. Gerçekten, belli değil mi?

 
Alexey Navoykov :

Statik alan, sınıfın örneklerinin varlığına bağlı olmamak için statik bir alandır. Ancak önce sınıfın bir örneğini oluşturmak istiyorsanız - tamam, oluşturun, ancak yalnızca işlevin içinde. Ve ondan bu alanı isteyin (en azından doğrudan, en azından bir yöntemle) - sonuç yine aynı olacaktır.

Öyleyse hala prosedürel veya nesne yönelimli programlamamız var mı? Neden birdenbire, başlatmadan önceki aşamada, tiplenmiş nesnelerle ilgili olarak sınıflarla ilgili olmayan işlevleri yerine getiriyor. Cevabın "çünkü istiyorsun" olduğunu anlıyorum. Ama geliştirici ben olsaydım, her şeyi iptal etmek ve bu belirli davranışı düzeltmek için koşmak için acele etmezdim, çünkü bu oldukça marjinal bir mimaridir ve ayrıca, sorun sınıfın bir örneğini oluşturarak kolayca çözülür. Elbette bir fonksiyonun içinde değil.

 
Alexey Viktorov :

SONRA, zaten yığdığınız o bahçeyi çitle çevirmemek için.

Pekala, zaten yığdım - ve biraz pişman değilim) Ve görüyorum ki, MQ tarafından dayatılan yapay kısıtlamalarla kendinizi zincirlemek gerçek bir zevk. Belki bir mazoşistsin? ) Evet ve ısrarla beni bunun tam olarak ihtiyaç duyulan şey olduğuna ikna etmeye çalışıyor. Gerekli değil, zorunlu.
 
Алексей Тарабанов :

Bir işlevi olan bir şeyin değerini başlatamazsınız. Gerçekten istesen bile. Gerçekten, belli değil mi?

Evet, net değil. Açıklamak.
 
Ilya Malev :

Öyleyse hala prosedürel veya nesne yönelimli programlamamız var mı? Neden birdenbire, başlatmadan önceki aşamada, tiplenmiş nesnelerle ilgili olarak sınıflarla ilgili olmayan işlevleri yerine getiriyor. Cevabın "çünkü istiyorsun" olduğunu anlıyorum. Ama geliştirici ben olsaydım, her şeyi iptal etmek ve bu belirli davranışı düzeltmek için koşmak için acele etmezdim, çünkü bu oldukça marjinal bir mimaridir ve ayrıca, . Elbette bir işlevin içinde değil .

Onlar. anladığım kadarıyla global değişkenlerin toplu kullanımının destekçisisiniz. O zaman sen ve ben birbirimizi anlamamız pek olası değil.

Ayrıca, işlevin kendisi şablonlanabilir. Ve oluşturulan örnek buna göre aynı tiple parametrelendirilmelidir:

 template < typename T>
int f()
{  
  A<T> a;
   return a.f();
}

Senin eylemlerin?