Genel sınıflar kütüphanesi - hatalar, açıklamalar, sorular, kullanım özellikleri ve öneriler - sayfa 20

Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
1. Belirsizliği giderme davranışı:
CPrimeGenerator::ExpandPrime'a parametre olarak "INT_MAX - 10" iletmek, "INT_MAX" sonucunu döndürür.
CPrimeGenerator::GetPrime'a parametre olarak "INT_MAX - 10" iletmek aynı sonucu döndürür: "INT_MAX - 10".
Ayrıca her iki durumda da döndürülen değerin asal sayı olmaması kullanıcıyı yanıltır.
İlk nokta için:
Burada bir belirsizlik yok.
GetPrime yöntemi üstten en yakın asal sayıyı döndürmelidir, ancak INT_MAX - 10 ile INT_MAX arasında hiçbiri yoktur, bu nedenle INT_MAX - 10 döndürülür.
ExpandPrime yöntemi, giriş değerini baştan ikiye katlar ve GetPrime yöntemi, alınan numaradan çağrılır.
Ayrıca ExpandPrime, INT_MAX'ın ötesine geçmek için bir kontrole sahiptir:
Bana göre, bu yöntemlerin davranışının mantığı kesinlikle açık ve doğrudur.
İkinci ve üçüncü noktalarla ilgili olarak:
Önerdiğiniz değişiklikler çoğunlukla yalnızca CHashMap boyutlarının çok büyük olduğu uç durumlarla ilgilidir. Ancak, performans üzerinde olumlu bir etkisi olacağının garantisi yoktur, bu nedenle önerdiğiniz değişikliklerin doğruluğunu belirlemek için ayrı çalışmalar yapmanız gerekir.
Burada bir belirsizlik yok.
GetPrime yöntemi üstten en yakın asal sayıyı döndürmelidir, ancak INT_MAX - 10 ile INT_MAX arasında hiçbiri yoktur, bu nedenle INT_MAX - 10 döndürülür.
ExpandPrime yöntemi, giriş değerini baştan ikiye katlar ve GetPrime yöntemi, alınan numaradan çağrılır.
Ayrıca ExpandPrime, INT_MAX'ın ötesine geçmek için bir kontrole sahiptir:
Bana göre, bu yöntemlerin davranışının mantığı kesinlikle açık ve doğrudur.
1. Fonksiyonlar asal sayılar döndüremez, ancak hangi sayıların olduğu belli değildir.
Kullanıcının bu verileri nasıl kullandığı onun sorunu, belki onu uzun bir süreye çevirir ve sonra süper hesaplama işlevlerine aktarır, fark nedir.
Gerçek şu ki, dönüş, varsayılan olarak işlevlerden bildirilen ve beklenen şey olmayabilir.
2. İşlev çağrısının yalnızca rastgele sayılar değil de bir asal sayı döndürüp döndürmediği nasıl kontrol edilir?
Sadece INT_MAX ile karşılaştırmak işe yaramaz.
INT_MAX'tan küçük olan son kullanılabilir asal sayı ile karşılaştırmanız gerekir.
Her şeyin doğru çalıştığından emin olmak için bu işlevleri çağırmanın sonucunu bazı sihirli sayılarla karşılaştırmak için her zaman - bana gelince, bu saçmalık.
1. Fonksiyonlar asal sayılar döndüremez, ancak hangi sayıların olduğu belli değildir.
Kullanıcının bu verileri nasıl kullandığı onun sorunu, belki onu uzun bir süreye çevirir ve sonra süper hesaplama işlevlerine aktarır, fark nedir.
Gerçek şu ki, dönüş, varsayılan olarak işlevlerden bildirilen ve beklenen şey olmayabilir.
2. İşlev çağrısının yalnızca rastgele sayılar değil de bir asal sayı döndürüp döndürmediği nasıl kontrol edilir?
Sadece INT_MAX ile karşılaştırmak işe yaramaz.
INT_MAX'tan küçük mevcut en son asal sayı ile karşılaştırmanız gerekir.
Her şeyin doğru çalıştığından emin olmak için bu işlevleri çağırmanın sonucunu bazı sihirli sayılarla karşılaştırmak için her zaman - bana gelince, bu saçmalık.
1. GetPrime yöntemiyle asal olmayan bir sayı alma durumunuz şu ana kadar gördüğüm tek durumdur. Bu olay, asal sayılar oluşturulurken kontrol değiştirilerek düzeltilecektir:
2. Bir sayının asal olup olmadığını kontrol etmek için CPrimeGenerator::IsPrime yöntemi uygulanır
ArrayList'imden Generic/ArrayList.mqh'deki sizinkine geçmeye çalıştım
"."den sonra BEN hiçbir şey üretmez.
Değer nasıl alınır? Get() ve [] sınıfta eksik.
Ve bir dizi işaretçi olabileceğini hesaba katmaz.
Peki bu kütüphaneyi kim oluşturuyor?
İşte benim Java ArrayList varyantım:
Genel koleksiyonların sınıf nesneleriyle doğru şekilde çalışması için bu sınıfların Equals ve HashCode yöntemlerini tanımlayan IEqualityComparable arabirimini uygulaması gerekir. Onlar. kullanıcının hash kodlarını hesaplamak için yöntemler belirlemesi gerekir ve bu, örneğin .Net'te olduğu gibi, MQL5 araçlarını kullanarak bu yöntemleri otomatik olarak uygulamak imkansız olduğundan, şimdiye kadarki tek seçenek budur.
Öyleyse şablonunuz neden programcıyı yanıltarak herhangi bir türle çalışıyor? Yalnızca IEqualityComparable'dan devralan sınıflar doğru çalışıyorsa, derleyici düzeyinde diğer türlerle çalışmayı yasaklamanız gerekir.
Unutma, bu kod:
Bu işlevin aşağıdakilerle değiştirilmesi gerektiğini düşünüyorum:
Öyleyse şablonunuz neden programcıyı yanıltarak herhangi bir türle çalışıyor? Yalnızca IEqualityComparable'dan devralan sınıflar doğru çalışıyorsa, derleyici düzeyinde diğer türlerle çalışmayı yasaklamanız gerekir.
Bu, çalışmak için elverişsiz olacaktır. Standart türler için GetHashCode aşırı yüklemeleri, bir karma kod elde etmek için bir arabirim sağlar.
Yokluğu can sıkıcı
Onlar. şimdi bummer nesneler için.
Bu, çalışmak için elverişsiz olacaktır. Standart türler için GetHashCode aşırı yüklemeleri, bir karma kod elde etmek için bir arabirim sağlar.
Şimdi kolaylık nedir? Bu işleve bir arabirimi desteklemeyen bir sınıfa bir numaralandırma veya işaretçi ileterek, yalnızca sınıfın adını elde ettiğiniz gerçeği mi? Muhteşem karma ) Ve en önemlisi, kod her şey yolundaymış gibi çalışır, derlenir. Konu o değil.
Şimdi kolaylık nedir? Bu işleve bir arabirimi desteklemeyen bir sınıfa bir numaralandırma veya işaretçi ileterek, yalnızca sınıfın adını elde ettiğiniz gerçeği mi? Muhteşem karma ) Ve en önemlisi, kod her şey yolundaymış gibi çalışır, derlenir. Konu o değil.
Evet, hile yaptılar. NetFramework'ten düşüncesizce kopyala-yapıştır yapılmıştır, ancak dil düzeyinde arayüz desteği olmadan bunun yeterince çalışamayacağı açıktır. 6-7 yıl önce ve şimdiki MQ kodlarının seviyesini hatırlıyorum - o zamana kıyasla, bugün bir tür karanlık var.
Şimdi kolaylık nedir? Bu işleve bir arabirimi desteklemeyen bir sınıfa bir numaralandırma veya işaretçi ileterek, yalnızca sınıfın adını elde ettiğiniz gerçeği mi? Muhteşem karma ) Ve en önemlisi, kod her şey yolundaymış gibi çalışır, derlenir. Konu o değil.
Katılıyorum, neden uzun süre çalışmadığını anlamaktan hemen bir derleme hatası almak daha iyidir.
Dürüst olmak gerekirse, arayüzün neden orada takıldığı hemen belli değil. Sonuçta, IEqualityComparable'ı çitlemeye başlamak yerine, istenen tür için GetHashCode'un aşırı yüklenmesini önerir.