Come ottenere la lunghezza di enum e item in MQL4/MQL5? - pagina 3

 
Andrey Barinov:

No, usare un array invece di enum è una cattiva progettazione.

Esempio: Immaginate di avere un valore stringa. E il compito è quello di scoprire se questa stringa è uguale/contiene in sé uno dei nomi degli elementi di enum (EnumToString()).

Come risolvereste questo?

Puoi fornire una situazione reale in cui tale cosa è necessaria? Gli enum sono solo costanti, perché vuoi identificare una stringa all'interno degli elementi?
 
Alain Verleyen:
Puoi fornire una situazione reale in cui tale cosa è necessaria? Enum sono solo costanti, perché vuoi identificare una stringa all'interno degli elementi?
 enum hedge
  {
   AUD=0,//Australian Dollar
   CAD=1,//Canadian Dollar
   CHF=2,//Swiss Franc
   JPY=3,//Japan Yen
   EUR=4,//European Euro
  };

Se vuoi costruire una struttura di copertura.

Ma poi mi limito a confrontare il tutto per scoprire il valore reale.

sinput hedge C1=2;// Hedge Currency 

if(C1=="CAD")
 {
  //Do Something
 }
 
Alain Verleyen:
Puoi fornire una situazione reale in cui tale cosa è necessaria? Gli enum sono solo costanti, perché vuoi identificare una stringa all'interno degli elementi?
La mia domanda era solo un esempio. Chi ha iniziato l'argomento ne ha descritto un altro. Capisco che non siano abbastanza "reali" per te e che tutti possano usare dei workaround, ma questo non rende questi compiti non reali per chi li sta risolvendo.
 
Andrey Barinov:
La mia domanda era solo un esempio. Chi ha iniziato l'argomento ne ha descritto un altro. Capisco che non sono abbastanza "reali" per voi e che tutti possono usare dei workaround, ma questo non rende questi compiti non reali per chi li sta risolvendo.
E siamo ancora bloccati qui... Una soluzione può essere trovata solo per un problema reale. Conosci il vero problema dell'OP? Io no.
 
Nemmeno io... e gliel'ho chiesto diverse volte ormai.
 
Alain Verleyen:
E siamo ancora bloccati qui... Si può trovare una soluzione solo per un problema reale. Conosci il vero problema dell'OP? Io no.

Conosco MOLTE situazioni reali in cui questo sarebbe utile. Questo è il motivo per cui io USO l'approccio con gli array, perché non c'è altro modo.

Esempio: Avete un enum/elenco di qualcosa (diciamo opzioni del linguaggio GUI per il vostro programma), e volete costruire dei pulsanti radio per esso, che l'utente possa scegliere. Non volete cambiare il codice dei pulsanti in seguito, se cambiate il numero di elementi nel vostro enum.

E avete bisogno di recuperare quel valore enum dal nome del pulsante da applicare al vostro programma. Non volete scrivere codice per OGNI elemento del vostro enum, volete una soluzione semplice all'interno di un ciclo

Questo può essere applicato non solo alle lingue, ma a MOLTE altre cose:

 
Molti modi per fare le stesse cose.
 
Marco vd Heijden:
Ci sono molti modi per fare le stesse cose.

Beh, ne conosco almeno uno, perché lo sto usando.

E questo non rende inutile la funzione di cui stiamo parlando. Si può piantare un chiodo con una pietra, ma ciò non significa che si debba fare sempre così.

 
Andrey Barinov:

Conosco MOLTE situazioni reali in cui questo sarebbe utile. Questo è il motivo per cui io USO l'approccio con gli array, perché non c'è altro modo.

1. Avete un enum/elenco di qualcosa (diciamo opzioni del linguaggio GUI per il vostro programma), e volete costruire dei pulsanti radio per esso, che l'utente possa scegliere. Non volete cambiare il codice dei pulsanti in seguito, se cambiate il numero di elementi nel vostro enum.

E avete bisogno di recuperare quel valore enum dal nome del pulsante per applicare il vostro programma. Non volete scrivere codice per OGNI elemento del vostro enum, volete una soluzione semplice all'interno di un ciclo

Questo può essere applicato non solo alle lingue, ma a MOLTE altre cose:

Lo so Andrey. Il tuo esempio ha bisogno di una soluzione dinamica, quindi non usi enum ma array. Se vuoi usare enum (statico) per qualcosa che è dinamico (il tuo esempio), è un cattivo design. Mi sembra che stiamo dicendo la stessa cosa.

Non possiamo aiutare di più l'OP perché non dice perché ha effettivamente bisogno di un loop.

 
Andrey Barinov:

Beh, ne conosco almeno uno, perché lo sto usando.

E questo non rende inutile la funzione di cui stiamo parlando. Si può piantare un chiodo con una pietra, ma ciò non significa che si debba sempre farlo.

Anche il linguaggio Java è esistito senza alcun tipo enum per molto tempo, e poiché Java usa raramente gli array puri, c'erano molti altri modi OO per iterare una lista di valori. Non lo chiamerei una pietra e un chiodo.

Motivazione: