O futuro da MQL5 é MQL5+ ou mesmo MQL6 - página 9

 

Mihail Matkovskij:

Embora seja possível contorná-los, a questão é por que, quando não há tais problemas em outros núcleos modernos?

Outras línguas modernas têm uma maneira diferente de fazer as coisas. Por exemplo, em Java não há variáveis globais e constantes, mas variáveis estáticas de classes declaradas podem ser usadas em seu lugar. Mas o ponto não muda, porque se você especificar um nome de variável estática que é duplicado em classes diferentes, o compilador pedirá para esclarecer o nome do pacote e a classe a que pertence, porque o processo de compilação não tem habilidades telepáticas. O mesmo se aplica às aulas. Se você especificar um nome de classe ou de interface que seja duplicado em diferentes pacotes, o compilador irá pedir novamente para especificar o nome do pacote.
 
Mihail Matkovskij:

Embora o erro não seja crítico, ele ainda é inconveniente.

Não é um erro, é mais uma notificação. Alguns idiomas não têm sequer notificações deste tipo. Algo no âmbito local se sobrepunha a algo superior, assim seja. Foi assim que foi pretendido. Mas, em alguns casos, tal advertência é bastante útil.

Por exemplo, na MQL, variáveis globais não têm nada a ver com isso e minha recomendação de não utilizá-las também é irrelevante:

Criar múltiplos escopos:

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

E eis que recebemos dois avisos.

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

Daí a conclusão -

1) ignorar tais avisos
2) evitar o uso dos mesmos nomes nas áreas de visibilidade abaixo/abaixo
3) convencer o Service Desk a remover esta notificação como inútil

 
Igor Volodin:

3) convencer o Service Desk a remover esta notificação como inútil

Se cada idiota convencer o Service Desk a remover esta ou aquela regra, porque do ponto de vista deles é inútil, a linguagem logo degenerará em um lixo primitivo.

 
Mihail Matkovskij:

Quero dizer, como não pode ser criado? Qualquer linguagem de programação usa livremente variáveis globais e está tudo bem, mas aqui o compilador jura. Embora o erro não seja crítico, ele ainda é inconveniente.

O ponto variável informa o preço de 1 ponto e é um substituto para o ponto padrão. A função MarketInfo(EA_Symbol(), MODE_POINT) dá o preço de 1 ponto para qualquer símbolo. Além disso, o ponto variável pode ser usado em qualquer função, no corpo da EA, se for uma variável global, é claro. Concordam que tais casos causam alguns inconvenientes com bastante freqüência (se você certamente tem experiência em programação MQL). E embora elas possam ser evitadas, mas a questão é por que, se outras línguas modernas simplesmente não têm tais problemas?

O ponto variável não pode ser uma variável global. Isto porque o preço pontual é diferente para símbolos diferentes (embora como regra, os preços pontuais coincidam). Conseqüentemente, o valor da tubulação só pode ser calculado dentro de uma negociação específica da EA sobre um símbolo específico e de nenhuma outra forma.
 

Infelizmente, somente programadores experientes entendem a utilidade e a importância de tal aviso.

Bem, recomendo a todos os outros que se alegrem com este nível de ajuda do compilador e corrijam seus próprios erros. Estes são lugares reais de erros potenciais e é exatamente para os desenvolvedores novatos que é extremamente importante aprender.

 

Eu gostaria de um esquema de cores. Não apenas no editor, mas também em outras janelas, para que o texto e a cor de fundo possam ser alterados.

Os dados dos membros da classe não devem ser coloridos na cor das variáveis de instância quando os nomes coincidem.

 

Já várias vezes, ao terminar o dia de trabalho e fechar as janelas do programa, navegadores, etc., fechei acidentalmente o terminal MT5 rodando também em modo de otimização. Assim, todos os resultados foram perdidos. A reinicialização do terminal começa tudo de novo.

Muitos programas quando você clica para fechar uma janela, eles perguntam se você tem certeza de fechá-la e que os dados não salvos podem ser perdidos.

É uma boa idéia fazer isso se o terminal estiver sendo otimizado.

 
Igor Volodin:

Não é sequer um erro, é uma notificação. Alguns idiomas não têm sequer notificações deste tipo. Algo em uma área local se sobrepunha a algo em um nível mais alto, tão bom. Foi assim que foi pretendido. Mas, em alguns casos, tal advertência é bastante útil.

Por exemplo, na MQL, variáveis globais não têm nada a ver com isso e minha recomendação de não utilizá-las também é irrelevante:

Criar múltiplos escopos:

E eis que recebemos dois avisos.

Daí a conclusão.

1) ignorar tais avisos
2) não fazer os mesmos nomes nas áreas de visibilidade abaixo/abaixo
3) convencer os servicedesk a remover esta notificação como inútil

Bem, 2 variáveis com o mesmo nome em um escopo não é bom e qualquer programador sabe disso. Mas o problema é que este escopo abrange módulos padrão que qualquer programador médio não adulteraria, uma vez que ele não se considera um desenvolvedor. A remoção das advertências também não é uma opção. Não prestar atenção a eles também é um verdadeiro inconveniente porque você pode deixar de perceber avisos importantes.

Vejo aqui duas maneiras de resolver o problema.

1. Fazer com que o plugin não veja o programa de plugins, se não estiver explicitamente especificado

2. Se os desenvolvedores não estiverem dispostos a mudar a sintaxe, introduza uma regra para declaração de parâmetros em funções, semelhante aos campos de classe, por exemplo, os nomes dos parâmetros devem começar com i ou i_ (do alfabeto Input) e assim fixar todos os parâmetros em módulos padrão

 

O compilador funciona corretamente e estas advertências são excepcionalmente corretas.

Só há uma saída: evitar a sobreposição de variáveis e não tentar preservar o direito de cometer erros exigindo que todos os outros respeitem esse direito.

 
Renat Fatkhullin:

O compilador funciona corretamente e estas advertências são excepcionalmente corretas.

Há apenas uma saída: não permitir sobreposições variáveis e não tentar preservar o direito de cometer erros com a exigência de que os outros respeitem esse direito.

Você provavelmente me entendeu mal. Não estou exigindo nada de ninguém, estou apenas dando conselhos sobre como tornar a MQL mais amigável ao usuário.
Razão: