Il futuro di MQL5 è MQL5+ o addirittura MQL6 - pagina 11

 
Alexey Kozitsyn:

Hai capito tutto. Usare una costante NULL.

Lasciate che vi dica un segreto: è già stato implementato. Devi cliccare sulla rotella del mouse e ci sarà un mirino.

Si può fare molto tempo fa. Dal navigatore si trascina l'indicatore sulla finestra con l'indicatore già collegato.

IMHO, non è la cosa più necessaria.

Hai un navigatore, hai dei preferiti, hai dei modelli, hai dei profili. Tutto può essere impostato. Leggete l'aiuto per il terminale, scoprirete molto!

Le enumerazioni sono utilizzate per rendere il codice più leggibile, per rimuovere le costanti e sostituirle con entità conosciute dall'uomo.

Per esempio, i valori dell'enumerazione ENUM_DAY_OF_WEEK possono essere usati per il confronto con il valore day_of_week della struttura MqlDateTime. Cioè si può scrivere così

Oppure puoi scriverlo in modo diverso:

SUNDAY è una costante denominata di tipo int con valore 0.

Cosa ne pensi, come sarà più chiaro per una persona che legge il codice?

Fico! Grazie per il navigatore! Non ci ha prestato molta attenzione. Di solito lo spengo, così non occupa troppo spazio. L'aiuto, anche se solo uno sguardo, l'ho letto. Non mi dice nulla su come trascinare un indiretto nella finestra dei grafici e sopra l'altro. Anche se avrei potuto indovinare e provare....)))

Grazie per aver spiegato la natura delle enumerazioni! Li ho letti molto velocemente, MQL è per lo più derivato da C++, e ci sono un sacco di banchi per esso. Ma un sacco di errori di stampa in Help e articoli incompleti non va bene.

Risultati: un aiuto scritto correttamente può aiutare ad evitare un sacco di domande stupide da parte di manichini sul forum!

Per quanto riguarda il NULL, è zero - è usato molto. Ma i valori massimi delle variabili sono molto raramente, quasi mai. Per esempio, una variabile memorizza tre stati dopo aver analizzato gli indicatori: BUY, SELL o NULL. Se usiamo le costanti già pronte POSITION_TYPE_BUY, POSITION_TYPE_SELL, una di esse è zero. Sono sicuro che EMPTY_VALUE sarà più popolare di NULL se lo si generalizza a tutti i tipi).

 
Alexander Puzanov:

C'è un'altra applicazione infinitamente utile. Per esempio:

E l'utente ottiene un elenco a discesa con una scelta di 4 elementi di ciò che hai scritto lì nei commenti - "Compra solo", "Vendi solo", ecc. Molto utile per elencare un insieme di indicatori, timeframes, un insieme di condizioni ecc. nella finestra delle impostazioni utente

Sì, certo! In questo caso possiamo anche aggiungere che semplifica il meccanismo di controllo dei valori inseriti dall'utente da parte del programma. Cioè tutti (valori corretti) sono descritti inizialmente.
 
agvozdezkiy:

La parte NULL è zero, ed è usata spesso. Per esempio, la variabile memorizza tre stati dopo aver analizzato gli indicatori: BUY, SELL o NULL. Se usiamo le costanti pronte POSITION_TYPE_BUY, POSITION_TYPE_SELL, una di esse è NULL.

Nessun problema, si può fare così:

#define  VALUE_EMPTY -1       // Пустое значение для числовых типов данных
#define  STR_VALUE_EMPTY ""   // Пустое значение для строкового типа

E mettetelo dove volete.

 
Alexey Kozitsyn:

Nessun problema, si può fare così:

E mettilo dove vuoi tu.

È tutto comprensibile. Non è quello che voglio dire.
 
agvozdezkiy:
Tutto questo è chiaro. Non è quello che voglio dire.

Allora spiega cosa intendi? Una singola costante per tutti i tipi di dati predefiniti? È improbabile che una cosa del genere venga attuata.

 
Renat Fatkhullin:

Purtroppo, solo i programmatori esperti capiscono l'utilità e l'importanza di un tale avvertimento.

Bene, raccomando a tutti gli altri di essere contenti dell'aiuto di questo livello del compilatore e di correggere i propri errori. Questi sono luoghi reali di potenziali errori ed è proprio per gli sviluppatori principianti che è criticamente importante imparare.

Puoi creare lo spazio dei nomi? Il problema sarebbe risolto anche allora.
 

L'argomento dei "metodi puramente virtuali" è già stato sollevato sul forum qualche anno fa.

Cioè nel concetto C++, i metodi virtuali senza corpo che devono essere sovrascritti nei discendenti:

virtual void Func1() = 0;

Inoltre, una classe che contiene tali metodi diventa automaticamente astratta. Il compilatore traccia anche questo. (Beh, è solo per attenersi agli standard, anche se si può nascondere il costruttore in uno scope protetto).

Attualmente ci mancano molti comportamenti di "metodi virtuali puri". Senza tale funzionalità, non si può preparare correttamente una libreria o un framework per esternalizzarla: si crea la classe figlia (che non è solo per niente, ma è incorporata come un ingranaggio in altre classi) e si è abbastanza gentili da implementare l'intera interfaccia. Ora, tu erediti, non metti l'implementazione di un metodo, il compilatore lo inghiotte, non funziona niente. Scavare nel codice sorgente della classe madre?

Il concetto di interfaccia è uno dei fondamenti della OOP. Pertanto, mi piacerebbe molto vedere l'implementazione di una cosa del genere in 5, e non in MQL6

A proposito, nella documentazione sulle funzioni virtuali, c'è un errore

Виртуальная функция, как и обычная функция, должна иметь исполняемое тело. При вызове семантика ее точно такая же, как и у остальных функций.

Esempio:

class Base {
private:
        int a;
public:
        virtual int Func1();
};


class Second: public Base {
public:
        int Func2() {
                return 0;
        };      
};

int OnInit() {

        Base* base = new Base();
        Second* foo = new Second();
   return(INIT_SUCCEEDED);
}

La funzione virtualeFunc1 non ha un corpo eseguibile (e non restituisce nemmeno un valore), ma si compila senza errori.

 
Igor Volodin:

L'argomento dei "metodi puramente virtuali" è già stato sollevato sul forum qualche anno fa.

Cioè nel concetto C++, metodi virtuali senza corpo, che devono essere OBBLIGATORIAMENTE sovrascritti nei discendenti:

Inoltre, una classe che contiene tali metodi diventa automaticamente astratta. Il compilatore traccia anche questo. (Beh, è solo per attenersi agli standard, anche se si può nascondere il costruttore in uno scope protetto).

Attualmente ci mancano molti comportamenti di "metodi virtuali puri". Senza tale funzionalità, non si può preparare correttamente una libreria o un framework per esternalizzarla: si crea la propria classe figlia (che non è solo per niente, ma è incorporata come un ingranaggio in altre classi) e si è abbastanza gentili da implementare l'intera interfaccia. Ora, tu erediti, non metti l'implementazione di un metodo, il compilatore lo inghiotte, non funziona niente. Scavare nel codice sorgente della classe madre?

Il concetto di interfaccia è uno dei fondamenti della OOP. Pertanto, mi piacerebbe molto vedere l'implementazione di una cosa del genere in 5, e non in MQL6

A proposito, nella documentazione sulle funzioni virtuali, c'è un errore

Esempio:

La funzione virtualeFunc1 non ha un corpo eseguibile (e non restituisce nemmeno un valore), ma si compila senza errori.

1. Le funzioni virtuali pure saranno aggiunte presto

2. Dove si trova la chiamata Func1 nel vostro esempio? Nessuna chiamata - nessun controllo del corpo.

 
Slawa:

1. Le funzioni virtuali pure saranno aggiunte presto

2. Dov'è la chiamata Func1 nel tuo esempio? Nessuna chiamata - neanche il controllo del corpo.

VS 2015 ha detto quanto segue

Severità Codice Descrizione Progetto File Linea Stato di soppressione

Errore LNK2001 simbolo esterno non risolto "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyP\AvForex\trunk\TestCPPCode.obj 1

Errore LNK1120 1 unresolved externals TestCPPCode C:\MyP\AvForex\trunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1

 
Alexey Volchanskiy:

VS 2015 ha detto quanto segue

Severità Codice Descrizione Progetto File Linea Stato di soppressione

Errore LNK2001 simbolo esterno non risolto "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyP\AvForex\trunk\TestCPPCode.obj 1

Errore LNK1120 1 unresolved externals TestCPPCode C:\MyP\AvForex\trunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1

Mostra il codice sorgente