Discussão do artigo "Aprendendo MQL5 do iniciante ao profissional (Parte III): Tipos de dados complexos e arquivos inclusos"

 

Novo artigo Aprendendo MQL5 do iniciante ao profissional (Parte III): Tipos de dados complexos e arquivos inclusos foi publicado:

O artigo é o terceiro de uma série sobre os aspectos fundamentais da programação em MQL5. Aqui são descritos tipos de dados complexos que não foram abordados no artigo anterior, incluindo estruturas, uniões, classes e o tipo de dado "função". Também é explicado como adicionar modularidade ao programa utilizando a diretiva de pré-processador #include.

Neste artigo, descreverei como o programador pode criar tipos de dados complexos, como: 

  • estruturas; 
  • uniões (union);
  • classes (em nível introdutório);
  • tipos que permitem usar o nome de uma variável como função. Isso permite, entre outras coisas, passar funções como parâmetros para outras funções.

Além disso, o artigo explica como incluir arquivos de texto externos usando a diretiva de pré-processador #include, para proporcionar modularidade e flexibilidade ao programa. Lembre-se de que os dados podem ser organizados de várias maneiras, mas o compilador sempre precisa saber quanta memória será necessária para o programa, e, por isso, antes de usar os dados, é necessário descrevê-los especificando o seu tipo.


Autor: Oleh Fedorov

 

Sou um iniciante que aprendeu os conceitos básicos de programação. Li seu próximo artigo e cheguei a uma conclusão: um iniciante com total falta de conhecimento não entenderá nada desse artigo. Essa é minha opinião pessoal, sem pretensão de ser a verdade em última instância.

Vamos tomar a seção Estruturas do artigo como exemplo. O início é bom e claro o suficiente. Você disse para que serve a estrutura e mostrou como criá-la. E então, bang, e um novo código!

IntradayTime dealEnterTime;

dealEnterTime.hours = 8;
dealEnterTime.minutes = 15;
dealEnterTime.timeCodeString = "GMT+2";

Eu destaquei essa parte do código propositalmente. O que um iniciante com conhecimento zero deve entender dessa linha? O que isso significa para ele? Eu já a entendo, mas para um iniciante sem conhecimento é outro fragmento de código incompreensível. É por isso que é desejável descrever e explicar completamente cada linha. Caso contrário, este artigo não é para iniciantes, mas para programadores avançados.

Saudações, Vladimir.

 
MrBrooklin #:

Sou um iniciante que aprendeu os conceitos básicos de programação. Li seu próximo artigo e cheguei a uma conclusão: um iniciante com total falta de conhecimento não entenderá nada desse artigo. Essa é minha opinião pessoal, sem pretensão de ser a verdade em última instância.

Vamos tomar a seção Estruturas do artigo como exemplo. O início é bom e claro o suficiente. Você disse para que serve a estrutura e mostrou como criá-la. E então, bang, e um novo código!

Eu destaquei essa parte do código propositalmente. O que um iniciante com conhecimento zero deve entender dessa linha? O que isso significa para ele? Eu já a entendo, mas para um iniciante com total falta de conhecimento, é outro fragmento de código incompreensível. É por isso que é desejável descrever e explicar completamente cada linha. Caso contrário, este artigo não é para iniciantes, mas para programadores avançados.

Saudações, Vladimir.

É impressão minha ou foi essa mesma estrutura que eu criei três linhas antes? E duas linhas atrás eu expliquei que ela é um tipo de dados? E isso deve significar que esse tipo deve ser usado da mesma forma que todos os outros? (Realmente, a lógica deve estar envolvida aqui, sim ;-))

Embora você provavelmente esteja certo, pelo menos um comentário sobre o tipo não faria mal.... Obrigado.

 
void OnStart()
classe PrivateAndPudlic
}
private:
int a;
public:
int b;
};
PrivateAndPudlic myVariable;
//myVariable.a = 5; //Erro do compilador!

myVariable.b = 10; //Não há problema, você pode fazer isso dessa forma

Ele dá um erro durante a compilação. Você pode me dizer o que está errado, onde está o erro?

 
AKHMED Asmalov #:
void OnStart()
classe PrivateAndPudlic
}
private:
int a;
público:
int b;
};
PrivateAndPudlic myVariable;
//myVariable.a = 5; //Erro do compilador!

myVariable.b = 10; //Não há problema, você pode fazer dessa forma.

Recebo um erro ao compilar. Você pode me dizer o que está errado, onde está o erro?

Desculpe-me pela demora na resposta.

O código deste exemplo não está totalmente completo. Para que ele funcione, você precisa usar a variável myVariable em algum lugar dentro da função. Por exemplo:

  class PrivateAndPudlic
   {
  private:
     int a;
  public:
     int b;
   }; 

 PrivateAndPudlic myVariable; // Variável global

void OnStart(){ // Todas as chamadas para ações (nesse caso, atribuição) devem ocorrer somente dentro de funções
  //myVariable.a = 5; //Erro do compilador!

   myVariable.b = 10; //Está tudo bem, está tudo bem
}

Bem, você inverteu os parênteses ao reimprimi-lo (colocou o fechamento "}" em vez da abertura "{") ;-)

 
Oleh Fedorov #:

Desculpe-me pela demora em responder.

O código deste exemplo não está totalmente completo. Para que ele funcione, você precisa usar a variável myVariable em algum lugar dentro da função. Por exemplo:

Bem, você inverteu os parênteses ao reimprimi-lo (em vez da abertura "{", você colocou o fechamento "}") ;-)

Bem, ou conforme descrito no artigo:

void OnStart(){

class PrivateAndPudlic
 {
  private:
     int a;
  public:
     int b;
   }; 
 PrivateAndPudlic myVariable;
 
//myVariable.a = 5; //Erro do compilador!

 myVariable.b = 10; //Está tudo bem, está tudo bem

}