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

 

Mihail Matkovskij:

Anche se possono essere aggirati, la domanda è perché, quando non ci sono questi problemi in altri kernel moderni?

Altre lingue moderne hanno un modo diverso di fare le cose. Per esempio, in Java non ci sono variabili globali e costanti, ma si possono usare variabili statiche delle classi dichiarate. Ma il punto non cambia, perché se si specifica il nome di una variabile statica che è duplicata in diverse classi, il compilatore chiederà di chiarire il nome del pacchetto e della classe a cui appartiene, perché il processo di compilazione non ha capacità telepatiche. Lo stesso vale per le classi. Se si specifica il nome di una classe o di un'interfaccia che è duplicata in diversi pacchetti, il compilatore chiederà nuovamente di specificare il nome del pacchetto.
 
Mihail Matkovskij:

Anche se l'errore non è critico, è comunque scomodo.

Non è un errore, è più una notifica. Alcune lingue non hanno nemmeno notifiche di questo tipo. Qualcosa nell'ambito locale si è sovrapposto a qualcosa di più alto, così sia. È così che è stato inteso. Ma in alcuni casi un tale avvertimento è piuttosto utile.

Per esempio, in MQL, le variabili globali non c'entrano niente e anche la mia raccomandazione di non usarle è irrilevante:

Creare ambiti multipli:

int OnInit()
  {
        int i = 10;
        {
                int i =5;
                {
                        int i = 0;
                }
        }
   return(INIT_SUCCEEDED);
  }

Ed ecco che riceviamo due avvertimenti.

declaration of 'i' hides local declaration at line 3    
declaration of 'i' hides local declaration at line 5    

Da qui la conclusione -

1) ignorare tali avvertimenti
2) evitare di usare gli stessi nomi nelle aree di visibilità sotto/sopra
3) convincere Service Desk a rimuovere questa notifica come inutile

 
Igor Volodin:

3) convincere Service Desk a rimuovere questa notifica come inutile

Se ogni idiota convincerà il Service Desk a rimuovere questa o quella regola, perché dal loro punto di vista è inutile, il linguaggio degenererà presto in una spazzatura primitiva.

 
Mihail Matkovskij:

Voglio dire, come può non essere creato? Qualsiasi linguaggio di programmazione usa liberamente le variabili globali e va bene, ma qui il compilatore giura. Anche se l'errore non è critico, è comunque scomodo.

Il punto variabile riporta il prezzo di 1 punto ed è un sostituto del punto standard. La funzione MarketInfo(EA_Symbol(), MODE_POINT) dà il prezzo di 1 punto per qualsiasi simbolo. Inoltre, il punto variabile può essere usato in qualsiasi funzione, nel corpo dell'EA, se è una variabile globale, naturalmente. Sono d'accordo che tali casi causano alcuni inconvenienti abbastanza spesso (se avete certamente esperienza nella programmazione MQL). E anche se possono essere evitati, ma la domanda è perché, se altre lingue moderne semplicemente non hanno questi problemi?

La variabile punto non può essere una variabile globale. Questo perché il prezzo dei punti è diverso per i diversi simboli (anche se di regola i prezzi dei punti coincidono). Di conseguenza, il valore del pip può essere calcolato solo all'interno di uno specifico EA che fa trading su un simbolo specifico e in nessun altro modo.
 

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.

 

Vorrei uno schema di colori. Non solo nell'editor, ma anche in altre finestre, in modo che il testo e il colore dello sfondo possano essere cambiati.

I dati dei membri della classe non dovrebbero essere colorati nel colore delle variabili di istanza quando i nomi coincidono.

 

Già diverse volte, quando ho finito la giornata di lavoro e ho chiuso le finestre dei programmi, i browser, ecc., ho chiuso accidentalmente anche il terminale MT5 in esecuzione in modalità di ottimizzazione. Così tutti i risultati sono andati persi. Riavviando il terminale si ricomincia tutto da capo.

Molti programmi quando cliccate per chiudere una finestra, vi chiedono se siete sicuri di chiuderla e i dati non salvati possono essere persi.

È una buona idea farlo se il terminale viene ottimizzato.

 
Igor Volodin:

Non è nemmeno un errore, è più una notifica. Alcune lingue non hanno nemmeno notifiche di questo tipo. Qualcosa in un'area locale si è sovrapposto a qualcosa in un livello superiore, quindi va bene. È così che è stato inteso. Ma in alcuni casi un tale avvertimento è piuttosto utile.

Per esempio, in MQL, le variabili globali non c'entrano niente e anche la mia raccomandazione di non usarle è irrilevante:

Creare ambiti multipli:

Ed ecco che riceviamo due avvertimenti.

Da qui la conclusione.

1) ignorare tali avvertimenti
2) non fare gli stessi nomi nelle aree di visibilità sotto/sopra
3) convincere servicedesk a rimuovere questa notifica come inutile

Bene, 2 variabili con lo stesso nome in un ambito non va bene e ogni programmatore lo sa. Ma il problema è che questo ambito copre moduli standard che qualsiasi programmatore medio non manometterebbe perché non si considera uno sviluppatore. Neanche rimuovere gli avvertimenti è un'opzione. Non prestarvi attenzione è anche un vero inconveniente perché potreste non notare avvertimenti importanti.

Vedo 2 modi di risolvere il problema qui.

1. Fare in modo che il plugin non veda il programma del plugin, se non è esplicitamente specificato

2. Se gli sviluppatori non sono disposti a cambiare la sintassi, introdurre una regola per la dichiarazione dei parametri nelle funzioni, simile ai campi di classe, ad esempio i nomi dei parametri dovrebbero iniziare con i o i_ (dall'alfabeto Input) e quindi fissare tutti i parametri nei moduli standard

 

Il compilatore funziona correttamente e questi avvertimenti sono eccezionalmente corretti.

C'è solo una via d'uscita: non permettere la sovrapposizione variabile e non cercare di preservare il diritto di sbagliare esigendo che gli altri rispettino quel diritto.

 
Renat Fatkhullin:

Il compilatore funziona correttamente e questi avvertimenti sono eccezionalmente corretti.

C'è solo una via d'uscita: non permettere la sovrapposizione variabile e non cercare di preservare il diritto di fare errori esigendo che il resto di noi rispetti tale diritto.

Probabilmente mi avete frainteso. Non sto chiedendo niente a nessuno, sto solo dando consigli su come rendere MQL più facile da usare.