Auto-aprendizagem da linguagem MQL5 a partir do zero - página 44

 
Vladimir Simakov:

Objetos globais, são inicializados com o construtor padrão. Para os tipos primitivos (no nosso caso, todos, exceto string), é 0. Mas para a memória (ler variáveis) alocadas na pilha, elas não são inicializadas. É por isso que as variáveis globais podem não ser inicializadas, lembre-se que neste caso elas serão iguais a zero. Mas a ausência de inicialização (ao mesmo tempo, habitue-se a evitar imediatamente avisos gerados pelo compilador, a menos que você saiba exatamente o que está fazendo) é um problema sério, pois a leitura de uma variável não-inicializada leva a um comportamento indefinido. Por exemplo, este código se comporta de maneira diferente no release e no debug builds e ninguém pode garantir que quando você muda a versão do compilador ou as configurações de otimização, seu comportamento não mudará também:

Olá, Vladimir! Obrigado por seu esclarecimento.

Atenciosamente, Vladimir.

 
MrBrooklin:

Peter, a respeito das variáveis globais, ainda não encontrei na literatura que as variáveis globais precisam ser predefinidas. Você tem um link com a fonte para melhorar seus conhecimentos sobre este assunto? A Referência MQL5 não contém uma referência explícita à inicialização:

O tipo bool é projetado para armazenar os valores booleanos verdadeiros ou falsos, cuja representação numérica é 1 ou 0, respectivamente .

Exemplos:

bool a =verdadeiro;
bool b =falso;
bool c =1;

A representação interna é um número inteiro de 1-byte. Deve-se notar que em expressões booleanas, é aceitável usar outros tipos inteiros ou reais ou expressões destes tipos em vez de bool, e o compilador não irá gerar um erro. Neste caso, zero será interpretado como falso e todos os outros valores como verdadeiros.

Cumprimentos, Vladimir.
É desejável inicializar explicitamente as variáveis globais, pelo menos para se acostumar a fazer isso. Novamente, em mql4 você não pode inicializar variáveis e matrizes em funções, mas em mql5 é obrigatório, caso contrário, as variáveis terão "lixo".
 

Adicionei-o ao código do roteiro:

//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)
bool enough_time=false;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience=false;

Agora, nos comentários do roteiro, de alguma forma, claramente escrito para um estudante da 1ª série de programação da escola por que o valor pré-definido para o tipo de dados bool deve ser exatamente falso e não verdadeiro.

Cumprimentos, Vladimir.

 
MrBrooklin:

Acrescentei-o ao código do roteiro:

Com todo o respeito, Vladimir.

Eu não tenho mais nada a reclamar. :)
 
MrBrooklin:

Continuo estudando a linguagem de programação MQL5 e estou postando o código de um script, que é uma continuação de uma tarefa dos participantes deste tópico. O roteiro foi testado em todos os modos. Não foram detectados problemas. Aplicou o número mínimo de parâmetros de entrada para começar. O código do roteiro é escrito em inglês, os comentários ao código estão em russo, para facilitar o processo de aprendizagem. Como prometi anteriormente, tentei descrever o roteiro de uma forma compreensível para um aluno da escola de programação de 1ª série.

Com os melhores cumprimentos, Vladimir.

Vladimir, você não deve escrever dessa forma. Não curto-circuitar o trabalho de funções em variáveis externas. A única exceção para você, até agora, é pegar valores de variáveis de entrada.
 
Vasiliy Sokolov:
Vladimir, você não deve escrever dessa forma. Não bloquear funções em variáveis externas. A única exceção para você, até agora, é pegar valores de variáveis de entrada.

Olá Vasily! Para ser honesto, eu não entendia bem o significado do que está em negrito. Por favor, explique o que você quis dizer com isso.

Atenciosamente, Vladimir.

 
MrBrooklin:

Olá Vasily! Honestamente, eu não entendia bem o significado do que estava escrito em negrito. Por favor, explique o que você quis dizer com isso.

Atenciosamente, Vladimir.

Não utilize variáveis globais. Escreverei mais tarde sobre as razões pelas quais não devem ser utilizadas.
 
Vasiliy Sokolov:
Não utilize variáveis globais. Por que você não deve usá-los, escreverei mais tarde.

Há uma boa anedota sobre isto:

- Pergunta: qual é o melhor tipo para uma variável global em c++?

- Resposta: //

 
Vasiliy Sokolov:
Não utilizar variáveis globais. Escreverei mais tarde porque eles não devem ser utilizados.

Agora eu entendo. Obrigado, espero ouvir de vocês porque não podem usar variáveis globais.

Cumprimentos, Vladimir.

 
Nesta fase, até a transição para a programação OOP, o uso de variáveis globais é totalmente justificado e não há motivo para se afastar delas. Eles são convenientes e fáceis de usar em qualquer parte do programa. Por que eles não devem ser usados? Imho.