GUI de origem popular. Testes beta abertos. - página 48

 

Peter, você pode me tratar como quiser, é um direito seu, mas aceite conselhos de um camarada um pouco mais experiente.

#include <GUI_DRIVE.mqh>
#include "..\Files\CORES.mqh"
#include "..\Files\Internal_API.mqh" 

O arquivoGUI_DRIVE.mqh é conectado primeiro no código. Nada é declarado antes dele.

Se você compilá-lo, você terá erro de G_CORE faltando, e é lógico porque o array não é declarado neste arquivo!

Conclusão? Bem, a conclusão é elementar: a matriz deve ser declarada neste arquivo. No final, é este arquivo que opera com esta matriz, porque este arquivo é o "motor"! Portanto, a declaração da matriz em si é correta, de acordo com o contexto de uso.

O próximo arquivo,CORES.mqh, preenche a matriz com a descrição dos elementos do formulário.

Naturalmente, ao compilar a própria EA com estes arquivos, se o array for declarado no primeiro arquivo, não haverá problemas de compilação, porque quando você compilar o segundo arquivo, o array já estará visível no contexto do programa.

Mas o que estamos dizendo é que cada arquivo deve ser compilado sem erros. Como o segundo arquivo preenche a matriz G_CORE com elementos, encontraremos naturalmente um erro ao compilar este arquivo, se a matriz não for declarada.

E aqui usamos, como disse Alexander, um toco.

Pyotr, você é um grande fã de definições, então você saberá o que está acontecendo.

No arquivo GUI_DRIVE você declara um array global de elementos do kernel G_CORE, depois disso o arquivo deve ser compilado sem erros.

Em seguida, neste arquivo você adiciona uma definição.

#define __DRIVE__

Passar para o arquivo Cores. Antes de declarar um array, utilize o pré-processador de compilação.

#ifndef __DRIVE__
int G_CORE[][prop_limit];
#endif

E então você preenche a matriz. Naturalmente, você terá que mudar um pouco a maneira de preencher a matriz, para fazê-lo sem declaração.

Acho que você tem a essência: se o arquivo CORES for compilado, o padrão__DRIVE__ desaparece e o código de declaração da matriz é compilado e tudo funciona bem.

Se o arquivo for compilado como parte do EA, então, após compilar o primeiro arquivo, a definição é declarada e no segundo arquivo a matriz não é declarada porque o compilador "corta" este pedaço de código.

Espero ter me feito entender.

Vou repetir novamente: todo arquivo deve ser compilado sem erros. Se você tem dependências, você precisa providenciar adequadamente sua localização e adicionar processadores de recompilação conforme necessário.

Quando você tem cada arquivo compilado sem erros, você tem mais confiança na integridade de todo o sistema.

Além disso, não se esqueça de acrescentar um imóvel em cada arquivo:

#property strict

Esta propriedade permite uma verificação mais rigorosa do código.

 
Isto faz pouco sentido na prática. Se cada arquivo compilado sem erros, independentemente da integridade da montagem geral, o usuário poderia facilmente perder a conexão de um dos arquivos. É fácil de esquecer.

De qualquer forma, é tão insignificante que não estou perdendo meu tempo com isso. Isto é um completo absurdo. É um absurdo.
 
Sim, você pode fazer com que cada arquivo seja compilado separadamente, sem erros, manipulando o pré-processador.

Mas é aí que reside o erro. Eles são partes de um todo e não devem "retratar" a independência de outras partes. E de fato, o usuário pode decidir que nem todos os arquivos são necessários, porque ele funciona como está.

Perder tempo com tal atividade que faz um sentido muito duvidoso? Quem eu estou tentando enganar? O compilador?

Os camaradas "experientes" parecem ter medo de sua voz severa e acreditam que ela está sempre certa em tudo. Então eles tentam se adaptar, mesmo que isso não faça sentido.

Eu tinha milhares de avisos em meu código de linguagem de marcação porque eu tinha que colocar (sring) antes das constantes. Posso imaginar como seria o código se eu colocasse uma conversão de tipo antes de cada número. Mas ao menos não haveria avisos.
 
Реter Konow:
Sim, ao manipular o pré-processador, você pode fazer com que cada arquivo seja compilado separadamente sem erros.

Mas é aí que reside o erro. Eles são partes de um todo e não devem "retratar" a independência de outras partes. E de fato, o usuário pode decidir que nem todos os arquivos são necessários, porque ele funciona como está.

Perder tempo com tal atividade que faz um sentido muito duvidoso? Quem eu estou tentando enganar? O compilador?

Os camaradas "experientes" parecem ter medo de sua voz severa e acreditam que ela está sempre certa em tudo. Assim eles tentam se adaptar, mesmo que isso não faça sentido.

Eu tinha milhares de avisos em meu código de linguagem de marcação porque eu tinha que colocar (sring) antes das constantes. Posso imaginar como seria o código se eu colocasse uma conversão de tipo antes de cada número. Mas ao menos não haveria avisos.

Alguns camaradas estão escrevendo um software separado que muda ligeiramente a interface do próprio meta-editor - apenas para facilitar o uso!

Este padrão é como usar um teclado - em vez de digitar letras em código morse através de um guincho. Os stubs não mudam nada, exceto a constante alternância entre arquivos em tempo de compilação. Mas um toco é 2 linhas de código. Quanto tempo gastaríamos nesta navegação apenas para apertar um botão. E quantas vezes viraremos 7 e o que se tornará mais racional para não desperdiçar nossas vidas digitando cartas através de um guincho

Note que não estamos falando de objetos ou classes, estamos apenas falando de economia de tempo. Seu tempo... E você mesmo pode criar um padrão para escrevê-los.
 
Sem mencionar a codificação em russo, que é discriminada por padrão pelo ambiente de desenvolvimento em língua inglesa. Também para adaptar e deixar meu cérebro com um mísero desempenho de 30%, enquanto eu posso usar tudo 100% em russo?

Tanto pelo preço do "profissionalismo".
 
Реter Konow:
Para não mencionar a codificação em russo, que por padrão é discriminada pelo ambiente de desenvolvimento em inglês. Devo também adaptar e deixar meu cérebro com uns míseros 30% de desempenho, enquanto posso usar todos os 100% em russo?

Tanto pelo preço do "profissionalismo".

Os profissionais utilizam seus próprios tipos de dados em seu código. Em geral, não importa em que idioma eles estejam.

Mas se uma função espera um número inteiro nesta ordem: Aceitar (largura, altura).

Em vez disso, misturamos acidentalmente e escrevemos

Aceitar (altura, largura) - então o próprio copiador diz que temos aqui uma confusão. Quer funcione para você - também não se trata da linguagem ou dos objetos. Trata-se apenas de não ter que procurar este erro por si mesmo

 
Alexandr Andreev:

Em código profissional, as pessoas utilizam seus próprios tipos de dados. Não importa realmente em que idioma eles estão.

Mas se uma função espera um número inteiro nesta ordem: Aceitar (largura, altura).

Em vez disso, misturamos acidentalmente e escrevemos

Aceitar (altura, largura) - então o próprio copiador diz que temos aqui uma confusão. Quer funcione para você - também não se trata da linguagem ou dos objetos. Trata-se apenas de não ter que procurar este erro por si mesmo.

Este é um ramo para testar soluções prontas e comunicá-las aos usuários.

Preciso de testadores construtivos, não de "profissionais" ambiciosos à procura de algo para reclamar.

Não vou discutir questões abstratas. Você conectou o painel montado, encontrou bugs, relatou-os? Muito obrigado! Jogar com inteligência e implicar com coisas que você não entende - adeus.
 
Cavalheiros espertos, vocês não pertencem aqui.

Para aqueles que não dirigiram o editor e não conectaram o painel, mas estão "ensinando", a conversa é curta.

O resto de vocês, sejam bem-vindos!
 
Алексей Барбашин:

Peter, você pode me tratar como quiser, é seu direito, mas siga o conselho de um camarada um pouco mais experiente.

.......

Não se esqueça também de acrescentar um imóvel em cada arquivo:

#property strict

Esta propriedade permite uma verificação mais rigorosa do código.

é para 5 - lá é sempre o mesmo!

embora em geral eu concorde: muitas advertências na compilação não aumentam a confiança no código.

 
Igor Zakharov:

é feito para cinco - é sempre rigoroso!

embora eu concorde em geral: muitos avisos em tempo de compilação não aumentam a confiança no código.

Vou remover as advertências. Temporariamente.