Hatalar, hatalar, sorular - sayfa 2532

 
Igor Makanu :

her şey çalışır, ancak gösterge arabellekleri olacak diziler, genel değiştirici ile bildirilmelidir.

Evet elbette.

Tabii ki, sınıf üyelerine genel erişim iyi değil, ancak asıl sorun, dizi verilerine kopyalamadan erişimin çözülmesidir.

Teşekkürler, sorun çözüldü.

 
Konu anlaşıldıysa yardımcı olur musunuz? Mamutları programlamanız için, bir ot yaprağı gibi...
 
Georgiy Merts :

Tabii ki, sınıf üyelerine genel erişim iyi değil, ancak asıl sorun, dizi verilerine kopyalamadan erişimin çözülmesidir.

YouTube'da çok video izliyorum, akıllı bir programcının kanalına rastladım, şu sözü hatırlıyorum: "Kod, her şeyden önce görevini yerine getirmeli!" ....

Büyük bir proje üzerinde çalışmıyorsun, değil mi? ekip çalışması değil mi? - Bu sınıf üyesinin neden bildirildiğini biliyor musunuz ve bir derleyici olmadan ona erişimi bir şekilde kontrol edebileceğinizi düşünüyorum? ;)

 

@İlyas MT4 derlemesi güncellendi


derleyip çalıştırdıktan sonra düzgün çalışan kod hata veriyor


 
Igor Makanu :

YouTube'da çok video izliyorum, akıllı bir programcının kanalına rastladım, şu sözü hatırlıyorum: "Kod, her şeyden önce görevini yerine getirmeli!" ....

Büyük bir proje üzerinde çalışmıyorsun, değil mi? ekip çalışması değil mi? - Bu sınıf üyesinin neden bildirildiğini biliyor musunuz ve bir derleyici olmadan ona erişimi bir şekilde kontrol edebileceğinizi düşünüyorum? ;)

Genel olarak, sınıf üyelerine yöntemlerle erişim uygulamak daha iyidir ve çalışma zamanında daha az başvuruya sahip olmak için get yöntemleriyle satır içi kullanın.
 
Igor Makanu :

YouTube'da çok video izliyorum, akıllı bir programcının kanalına rastladım, şu sözü hatırlıyorum: "Kod, her şeyden önce görevini yerine getirmeli!" ....

Büyük bir proje üzerinde çalışmıyorsun, değil mi? ekip çalışması değil mi? - Bu sınıf üyesinin neden bildirildiğini biliyor musunuz ve bir derleyici olmadan ona erişimi bir şekilde kontrol edebileceğinizi düşünüyorum? ;)

EVET HAYIR.

Kod her şeyden önce - şeffaf ve anlaşılır olmalı, bakımı kolay olmalıdır. Ve sonra görevini yerine getirmezse, hemen görünür olacaktır.

Ancak kod, potansiyel olarak tehlikeli yapılara sahip bir grup yerle dolduğunda, çünkü çok zor ve aşikar olmayan hatalar daha sonra ortaya çıkar, "kodun görevini yerine getirdiğinden" asla emin olamazsınız.

Ve büyük bir projede çalışırken, onsuz hiçbir şey yoktur, birçok ofiste gösterim, duyurular, nelerin kamuya açıklanıp nelerin duyurulamayacağı vb. ile ilgili resmi yönergeler vardır. Tek başınıza çalıştığınızda aslında kendinizi sınıfa üye ilan ettiğiniz, ne amaçla kullanacağınızı, nasıl kullanacağınızı bildiğiniz açıktır. Ancak bir şekilde karmaşık olan herhangi bir kod, tek bir programcı tarafından yapılsa bile, mimariyi değiştirme eğilimindedir. Ve ne, nerede, nasıl ve ne için - kişisel olarak yapamam. Aynı zamanda - ayrıntılı yorumlarla kodu çok cömertçe serpiyorum. Ve her neyse, altı ay sonra diğer alanlara geri dönüyorum - bunun neden böyle yapıldığını anlamak için oldukça fazla zaman harcıyorum, başka türlü değil. Yorum yok - Ben sadece kendi kodumu bulduğum bir yaban turpu yapıyorum.

Değil, elbette, Peter Konov'un sahip olduğu gibi bir hafızanız varsa - erişim paylaşımı ile uğraşamazsınız, tüm değişkenleri global olanlar olarak soyun - ve ihtiyacınız olan her şeyi istediğiniz zaman kullanın. Ancak hafızam çok daha kötü ve bir hafta içinde belirli bir prosedürün inceliklerini unutabilirim. Bu nedenle, kodun herhangi bir yerinde tam olarak burada ihtiyaç duyulduğu kadar mevcut olması gerektiği ve tek bir değişkenin daha fazla olmaması gerektiği ilkesini uzun zamandır kendim için çalıştım. En iyisi, her şeyi sanal arabirimlere sarmak ve mümkün olduğunca her sınıfın sorumluluk alanlarını ayırmaktır (ancak, elbette, bu aynı sarmalayıcılarla yararlı kodlardan daha fazla uğraşmamak için bir önlem gereklidir. ).

Dizilere işaretçi olmamasının geliştiriciler tarafından "programcılar için endişe" olarak gerekçelendirildiğini hatırlatmama izin verin, böylece artık alakalı olmayan bir diziye yanlışlıkla işaretçi kullanmazsınız. Her ne kadar sınıflar için - sorun değil. Eh, şöyle açıkladılar, "Eğer sınıflarla yazıyorsanız, işaretçileri kullanmak için zaten yeterli kalifikasyonunuz var ve diziler yeni başlayanlar tarafından kullanılabilir ve işaretçileri kullanmak istediklerinde zorluk yaşamalarını istemiyoruz. diziler... işaretçi yok - işte bu kadar"...

 
Vladimir Simakov :
Genel olarak, sınıf üyelerine yöntemlerle erişim uygulamak daha iyidir ve çalışma zamanında daha az başvuruya sahip olmak için get yöntemleriyle satır içi kullanın.

Aynen öyle. Ve genellikle ona doğru eğilirim. Ben sadece sınıfın genel üyelerini çok nadiren kullanıyorum, her yere erişim yalnızca satır içi yöntemlerle. Sadece özel durumlarda, bu gösterge dizilerinde olduğu gibi, public kullanmanız gerekir...

 
Влад :
Konu anlaşıldıysa yardımcı olur musunuz? Mamutları programlamanız için, bir ot yaprağı gibi...

Sizin durumunuzda, bir while () döngüsü düzenlemeniz gerekir, for () değil.

Yanıp sönmenin bittiğine dair bir işaret olup olmadığını kontrol edin.

Ancak "değişken bir frekansta yanıp sönme" gerçeği hakkında - garip bir şey ... Hemen herhangi bir hata görmüyorum, oldukça sık yanıp sönmesi gerekiyor.

Ancak, makul olduğundan şüpheliyim - onları görünmez yapmak yerine grafik nesneleri oluşturmak ve silmek . Ama bir cismi görünmez yapmak imkansız görünüyor... Yani geriye sadece onu silmek kalıyor.

 
Georgiy Merts :

Değil, elbette, Peter Konov'un sahip olduğu gibi bir hafızanız varsa - erişim paylaşımı ile uğraşamazsınız, tüm değişkenleri global olanlar olarak soyun - ve ihtiyacınız olan her şeyi istediğiniz zaman kullanın.

Hafızayı asla eğitmem, global değişkenleri son çare olarak kullanırım, bazen kod bana gereksiz bile gelir, ancak kod bölümleri başka bir projeye taşınabilir,

Genelde uzun fonksiyon ve değişken isimleri kullanırım, böylece daha önce yazdıklarımı okuyabilirim:

 void CGrid::Scenario_01( int ordernumber) //------ Сценарий ReOpenBUY & ReOpenSELL
  {
   int set          = Order[ordernumber].StateOrderNumberSetting;
   double pr       = Order[ordernumber].StateOrderStartPrice;
   double vol      = Order[ordernumber].StateOrderLot;
   double volcoeff = dealssettings[ set ].volcoeff;
   double profit,openprice;
   Order[ordernumber].GetCloseOrderInfo(profit,openprice);
   double l=CalcLot(dealssettings[ set ].volratio,vol,volcoeff,profit);
   deal= new Cdeal( set ,dealssettings[ set ].dealtype,l,pr,dealssettings[ set ].closepips,magic);
   Order.Delete(ordernumber); 
   Order.AddValue(deal);
  }
başka bir soru ise ideal OOP stiline bağlı kalmam - her şeyi sınıflara sarmam, hem prosedür stilini hem de OOP'yi aynı anda tek bir programda kullanırım, benim için daha uygun ve daha hızlı eksik olan hazır bloklardan program, görev için bitmiş olanı ekliyorum veya değiştiriyorum
 
Vladimir Simakov :
ve çalışma zamanında daha az başvuruya sahip olmak için, get yöntemleriyle satır içi kullanın.
satır içi bence bir bekletme. Derleyicinin kendisi her şeyi mükemmel bir şekilde sıralar, bu nedenle kodu karmaşık hale getirmeye gerek yoktur. Tüm bu düşük seviyeli gadget'lar geçmişte bırakılabilir. Ve MQL'de bu belirteç genellikle boştur, yalnızca uyumluluk için eklenmiştir (böyle bir makroyu kendim bildirmek mümkün olsaydı nedenini bilmiyorum)