MQL4/MQL5'te numaralandırma ve öğe uzunluğu nasıl elde edilir? - sayfa 3

 
Andrey Barinov :

Hayır, enum yerine dizi kullanmak kötü bir tasarımdır.

Örnek: Bir dize değeriniz olduğunu düşünün. Ve görev, bu dizgenin eşit olup olmadığını/içinde enum öğeleri adlarından birini (EnumToString()) içerip içermediğini bulmaktır.

Bunu nasıl çözersiniz?

Böyle bir şeyin gerekli olduğu gerçek bir durum sağlayabilir misiniz? Enum sadece sabitlerdir, neden öğeler içinde bir dize tanımlamak istiyorsunuz?
 
Alain Verleyen :
Böyle bir şeyin gerekli olduğu gerçek bir durum sağlayabilir misiniz? Enum sadece sabitlerdir, neden öğeler içinde bir dize tanımlamak istiyorsunuz?
 enum hedge
  {
   AUD= 0 , //Australian Dollar
   CAD= 1 , //Canadian Dollar
   CHF= 2 , //Swiss Franc
   JPY= 3 , //Japan Yen
   EUR= 4 , //European Euro
  };

Bir çit yapısı oluşturmak istiyorsanız.

Ama sonra gerçek değeri keşfetmek için hepsini karşılaştırırım.

 sinput hedge C1= 2 ; // Hedge Currency 

if (C1== "CAD" )
 {
   //Do Something
 }
 
Alain Verleyen :
Böyle bir şeyin gerekli olduğu gerçek bir durum sağlayabilir misiniz? Enum sadece sabitlerdir, neden öğeler içinde bir dize tanımlamak istiyorsunuz?
Benim sorum sadece bir örnekti. Konu başlatıcı başka bir konuyu açıkladı. Sizin için yeterince "gerçek" olmadıklarını ve herkesin geçici çözümler kullanabileceğini anlıyorum, ancak bu, bu görevleri, onları çözen insanlar için gerçek yapmaz.
 
Andrey Barinov :
Benim sorum sadece bir örnekti. Konu başlatıcı başka bir konuyu açıkladı. Sizin için yeterince "gerçek" olmadıklarını ve herkesin geçici çözümler kullanabileceğini anlıyorum, ancak bu, bu görevleri, onları çözen insanlar için gerçek yapmaz.
Ve biz hala burada sıkışıp kaldık... Bir çözüm ancak gerçek bir sorun için bulunabilir. OP'nin asıl sorununu biliyor musunuz? Yapmıyorum.
 
Ben de.. ve şimdi ona birkaç kez sordum.
 
Alain Verleyen :
Ve biz hala burada sıkışıp kaldık... Bir çözüm ancak gerçek bir sorun için bulunabilir. OP'nin asıl sorununu biliyor musunuz? Yapmıyorum.

Bunun faydalı olacağı pek çok gerçek durum biliyorum. Bu yüzden yaklaşımı dizilerle KULLANIYORUM, çünkü başka bir yol yok.

Örnek: Bir şeyin enum/listesine sahipsiniz (programınız için GUI Dil seçenekleri diyelim) ve kullanıcının seçmesi için bunun için radyo düğmeleri oluşturmak istiyorsunuz. Numaralandırmanızdaki öğe sayısını değiştirirseniz, daha sonra düğme kodunu değiştirmek İSTEMEZSİNİZ.

Ve programınıza uygulamak için bu enum değerini düğmenin adından almanız gerekir. Numaralandırmanızdaki HER öğe için kod yazmak İSTEMİYORSUNUZ, bir döngü içinde basit bir çözüm istiyorsunuz

Bu, yalnızca dillere değil, birçok başka şeye de uygulanabilir:

 
Aynı şeyleri yapmanın birçok yolu var.
 
Marco vd Heijden :
Birçok yolu aynı şeyleri yapmaktır.

En az birini biliyorum çünkü kullanıyorum.

Ve bahsettiğimiz özelliği işe yaramaz hale getirmez. Taşla çivi çakabilirsiniz ama bu her zaman yapmanız gerektiği anlamına gelmez.

 
Andrey Barinov :

Bunun faydalı olacağı pek çok gerçek durum biliyorum. Bu yüzden yaklaşımı dizilerle KULLANIYORUM, çünkü başka bir yol yok.

1. Bir şeyin enum/listesine sahipsiniz (programınız için GUI Dil seçenekleri diyelim) ve kullanıcının seçmesi için bunun için radyo düğmeleri oluşturmak istiyorsunuz. Numaralandırmanızdaki öğe sayısını değiştirirseniz, daha sonra düğme kodunu değiştirmek İSTEMEZSİNİZ.

Ve programınızı uygulamak için bu enum değerini düğmenin adından almanız gerekir. Numaralandırmanızdaki HER öğe için kod yazmak İSTEMİYORSUNUZ, bir döngü içinde basit bir çözüm istiyorsunuz

Bu, yalnızca dillere değil, birçok başka şeye de uygulanabilir:

Andrey'i tanıyorum. Örneğiniz dinamik bir çözüme ihtiyaç duyuyor, bu nedenle enum değil dizi kullanıyorsunuz. Dinamik olan bir şey (örneğiniz) için enum (statik) kullanmak istiyorsanız, bu kötü bir tasarımdır. Bana aynı şeyi söylüyoruz gibi geliyor.

OP'ye neden döngü yapması gerektiğini söylemediği için daha fazla yardımcı olamayız.

 
Andrey Barinov :

En az birini biliyorum çünkü kullanıyorum.

Ve bahsettiğimiz özelliği işe yaramaz hale getirmez. Taşla çivi çakabilirsiniz ama bu her zaman yapmanız gerektiği anlamına gelmez.

Java dili bile HERHANGİ bir numaralandırma türü olmadan çok uzun bir süre vardı ve Java saf dizileri nadiren kullandığından, bir değerler listesini yinelemenin başka birçok OO yolu vardı. Ben ona taş ve çivi demezdim.

Neden: