Características da linguagem mql5, subtilezas e técnicas - página 121

 
TheXpert:

Não o compreendo então.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Peculiaridades de mql5, dicas e truques

Alexey Navoykov, 2019.01.14 16:35

Se precisar, pode declarar nula OnTick(); logo no início. Mas, em geral, a ordem de declaração de funções é uma forma adicional de controlar a correcção do código. Por exemplo, se nalgum plug-in telefonar OnTick() ou, pior ainda, OnInit() acontecer, será bom? As bibliotecas não devem ver o seu código de trabalho.
 
fxsaber:

Então não o compreendo

As declarações de avanço são apenas para classes e estruturas, não para funções.

 
fxsaber:

A questão é que se as funções que vai utilizar estiverem especificadas no inlude, terá de as escrever de acordo com a sugestão, se o inlude estiver abaixo.

Qual é o problema de inserir um inluder mais cedo?

Pode ser inconveniente para um ficheiro (a função com corpo tem de ser antes da chamada), mas se a função em mqh - qual é o problema de inserir o inlude no início?

 
TheXpert:

A declaração prévia é apenas para classes e estruturas, não para funções.

Isso é óptimo que o tenha esclarecido.

Andrey Khatimlianskii:

Qual é o problema de inserir um inluder mais cedo?

Pode ser inconveniente para um único ficheiro (uma função com um corpo necessariamente antes da chamada), mas se a função estiver em mqh - qual é o problema de inserir um inlude logo no início?

Algumas construções com macros têm por vezes exigido um inlude na última linha. Não vou dar-vos um exemplo específico, já os encontrei na prática muitas vezes.

 
TheXpert:

As declarações de avanço são apenas para classes e estruturas, não para funções.

Não, eu também estou errado. uma função tem uma declaração e uma definição.
 
fxsaber:

Algumas construções com macros por vezes necessitavam de um inlude na última linha. Não vou dar-vos um exemplo concreto, já os encontrei muitas vezes na prática.

Bem, isto é algo bastante exótico. Não creio que valha a pena sacrificar a correcção arquitectónica por causa delas.

De qualquer modo, o código do programa deve, em qualquer caso, ser executado exactamente de acordo com o seu algoritmo pretendido. O acesso a uma variável antes da sua inicialização é um disparate. Isto não deve ser compilado.

 

A propósito, se um inlude utiliza algumas funções que não estão lá, elas devem ser declaradas lá de qualquer maneira. Tal como as classes e variáveis externas. Caso contrário, é uma muleta, não um inlude.

De forma correspondente, o plug-in não deve depender do local onde está ligado.

 
Alexey Navoykov:
A propósito, se algumas funções são utilizadas no inlude, que não estão lá, devem ser declaradas lá de qualquer maneira. Tal como as aulas e as variáveis externas. Caso contrário, não é um indício, mas uma muleta.

O que pensa que é um inlude? Para mim, é apenas um pedaço de texto, atribuído a um ficheiro separado. E a sua reintrodução na fonte é ignorada. Nada mais.

 
fxsaber:

O que pensa que é um inlude? Para mim, é apenas um pedaço de texto, atribuído a um ficheiro separado. E a sua reintrodução na fonte é ignorada. Nada mais.

Penso que deveria ser um código independente e independente. Faz mais sentido, e é fácil de controlar, e fazer verificações independentes da sintaxe deste código. Mas se tudo está em ficheiros diferentes e não está claro de onde está a ser chamado, é o caos.

 
Alexey Navoykov:

Bem, penso que deveria ser um código independente. Faz mais sentido e é mais fácil controlar e executar uma verificação independente da sintaxe deste código. E se tudo estiver espalhado pelos ficheiros e não estiver claro o que é chamado de onde - é o caos.

Apresentei exemplos do meu código. Não ouvi qualquer feedback sobre o caos, mesmo para os incúdios que não se compilam.

Razão: