Как получить длину перечисления и элемента в MQL4/MQL5? - страница 3

 
Andrey Barinov:

Нет, использование массива вместо перечисления - это плохой дизайн.

Пример: Представьте, что у вас есть строковое значение. И задача состоит в том, чтобы выяснить, равна ли эта строка/содержит ли она в себе одно из имен элементов перечисления (EnumToString()).

Как бы вы решили эту задачу?

Можете ли вы привести реальную ситуацию, в которой такое необходимо? Enum - это просто константы, почему вы хотите определить строку внутри элементов?
 
Alain Verleyen:
Можете ли вы привести реальную ситуацию, в которой такое необходимо? Enum - это просто константы, почему вы хотите определить строку внутри элементов?
 enum hedge
  {
   AUD=0,//Australian Dollar
   CAD=1,//Canadian Dollar
   CHF=2,//Swiss Franc
   JPY=3,//Japan Yen
   EUR=4,//European Euro
  };

Если вы хотите построить структуру хеджирования.

Но потом я просто сравниваю все, чтобы выявить реальную стоимость.

sinput hedge C1=2;// Hedge Currency 

if(C1=="CAD")
 {
  //Do Something
 }
 
Alain Verleyen:
Можете ли вы привести реальную ситуацию, когда такая вещь необходима? Enum - это просто константы, почему вы хотите определить строку внутри элементов?
Мой вопрос был просто примером. Топикстартер описал другой. Я понимаю, что для вас они не достаточно "реальны" и каждый может использовать обходные пути, но это не делает эти задачи не реальными для тех, кто их решает.
 
Andrey Barinov:
Мой вопрос был просто примером. Топикстартер описал другой. Я понимаю, что они не достаточно "реальны" для вас и каждый может использовать обходные пути, но это не делает эти задачи не реальными для людей, которые их решают.
И мы все еще застряли здесь... Решение может быть найдено только для реальной проблемы. Знаете ли вы реальную проблему ОП? Я не знаю.
 
Я тоже. И я спрашивал его несколько раз.
 
Alain Verleyen:
И мы все еще застряли здесь... Решение может быть найдено только для реальной проблемы. Знаете ли вы реальную проблему ОП? Я не знаю.

Я знаю МНОГО реальных ситуаций, когда это было бы полезно. Вот почему я использую подход с массивами, потому что другого пути нет.

Пример: У вас есть перечисление/список чего-то (допустим, опции языка GUI для вашей программы), и вы хотите создать радиокнопки для этого, чтобы пользователь мог выбирать. Вы НЕ ХОТИТЕ впоследствии менять код кнопок, если вы измените количество элементов в перечне.

И вам нужно получить значение перечисления из имени кнопки, чтобы применить его к вашей программе. Вы НЕ ХОТИТЕ писать код для КАЖДОГО элемента в перечислении, вам нужно простое решение в рамках цикла.

Это можно применить не только к языкам, но и ко многим другим вещам:

 
Много способов сделать одно и то же.
 
Marco vd Heijden:
Есть много способов делать одни и те же вещи.

Ну, я знаю, по крайней мере, одну, потому что я ее использую.

И это не делает функцию, о которой мы говорим, бесполезной. Вы можете забить гвоздь камнем, но это не значит, что вы всегда должны это делать.

 
Andrey Barinov:

Я знаю МНОГО реальных ситуаций, когда это было бы полезно. Вот почему я использую подход с массивами, потому что другого пути нет.

1. У вас есть перечисление/список чего-то (допустим, опции языка GUI для вашей программы), и вы хотите создать радиокнопки для этого, чтобы пользователь мог выбирать. Вы НЕ ХОТИТЕ впоследствии менять код кнопок, если вы измените количество элементов в перечне.

И вам нужно получить значение перечисления из имени кнопки, чтобы применить вашу программу. Вы НЕ ХОТИТЕ писать код для КАЖДОГО элемента в перечислении, вам нужно простое решение в рамках цикла.

Это можно применить не только к языкам, но и ко многим другим вещам:

Я знаю Андрея. Ваш пример требует динамического решения, поэтому вы используете не enum, а массив. Если вы хотите использовать enum (статический) для чего-то динамического (ваш пример), то это плохой дизайн. Мне кажется, мы говорим об одном и том же.

Мы не можем помочь ОП больше, поскольку он не сказал, зачем ему на самом деле нужен цикл.

 
Andrey Barinov:

Ну, я знаю, по крайней мере, одну, потому что я ее использую.

И это не делает функцию, о которой мы говорим, бесполезной. Вы можете забить гвоздь камнем, но это не значит, что вы должны делать это всегда.

Даже язык Java существовал без ЛЮБОГО типа enum очень долгое время, и поскольку Java редко использует чистые массивы, было много других OO способов итерации списка значений. Я бы не стал называть это камнем и гвоздем.

Причина обращения: