Discussão do artigo "Aprendendo PrintFormat() e obtendo exemplos prontos para uso"

 

Novo artigo Aprendendo PrintFormat() e obtendo exemplos prontos para uso foi publicado:

Este artigo será útil tanto para iniciantes quanto para desenvolvedores experientes. Nele, analisaremos a função PrintFormat(), veremos exemplos de formatação de strings e escreveremos modelos para a exibição de diferentes informações no log do terminal.

A saída de valores para o log ou para a tela do monitor é uma operação simples e conhecida, até que seja necessário gerar algo mais complexo do que "Hello, world". Mas, mais cedo ou mais tarde, surge aquela situação em que você precisa gerar uma saída formatada de um valor ou de uma propriedade que não é necessária com frequência. Certamente, você pode acessar a Documentação MQL5 e se lembrar do que esqueceu ou não sabia.


Mas, às vezes, você quer ter uma coleção de receitas prontas para produzir todos os tipos de informações fornecidas pelo terminal MetaTrader 5. Neste artigo, tentaremos entender as nuances da chamada da função PrintFormat e escrever modelos prontos que podem ser simplesmente inseridos em seu código.

Autor: Artyom Trishkin

 

Obrigado. Muito informativo, mas não desde a primeira leitura...))))))

Ler a ajuda ao escrever código é, de certa forma, doloroso e demorado. É por isso que não entendo muito... Espero que este artigo me ajude a entender melhor as sutilezas de PrintFormat() e StringFormat().

 
Talvez o único ponto não óbvio da ajuda não tenha sido abordado - em que casos pode ser realmente útil especificar o especificador de tamanho de dados (h | l | ll | I32 | I64) se tudo funcionar sem ele.
 
JRandomTrader #:
Talvez o único ponto não óbvio não abordado na ajuda seja quando a especificação do especificador de tamanho de dados (h | l | ll | I32 | I64) pode ser realmente útil se tudo funcionar sem ele.

Veja este exemplo

//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long x = (long)0xFFFFFFFF * 1000;

   Print("\nDEC: ",  typename(x)," x=",x,"\n---------");
   Print("%hu: ",  StringFormat("%hu",x));
   Print("%u: ",   StringFormat("%u",x));
   Print("%I64u: ",StringFormat("%I64u",x));
   Print("%llu: ", StringFormat("%llu",x));
   Print("\nHEX: ",  typename(x)," x=",StringFormat("%llx",x),"\n---------");
   Print("%hx: ",  StringFormat("%hx",x));
   Print("%x: ",   StringFormat("%x",x));
   Print("%I64x: ",StringFormat("%I64x",x));
   Print("%llx: ", StringFormat("%llx",x));

  }

Resultado

2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  DEC: long x=4294967295000
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  ---------
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %hu: 64536
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %u: 4294966296
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %I64u: 4294967295000
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %llu: 4294967295000
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  HEX: long x=3 e7fffffc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  ---------
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %hx: fc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %x: fffffc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %I64x: 3 e7fffffc18
2023.07.12 17:48:12.920 PrinFormat (EURUSD,H1)  %llx: 3 e7fffffc18
 
JRandomTrader #:
Talvez o único ponto não óbvio da ajuda não tenha sido abordado - em que casos pode ser realmente útil especificar o especificador de tamanho de dados (h | l | ll | I32 | I64) se tudo funciona sem ele.

É claro que funciona. Mas, há apenas algumas horas, eu estava pensando na mesma questão e tive uma ideia: se passarmos apenas valores duplos para uma função e, em seguida, dentro dela, com base em alguns critérios, entendermos que esses dados duplos devem ser dados longos. É aqui que especificamos seu tamanho. Apenas uma ideia em voz alta. Não verifiquei isso.

 

Como vivi todos esses anos sem o printformat? Provavelmente continuarei vivendo assim.

 
Dmitry Fedoseev #:

Como vivi todos esses anos sem o printformat? Provavelmente continuarei vivendo assim.

Provavelmente

 

Artem, não entendo de onde veio isso

   uint w=(header_width==0 ? header.Length()+1 : header_width);

Eu não conectei nenhuma biblioteca. Ou estou completamente cego?

 
Alexey Viktorov #:

Artem, não entendo de onde veio isso

Não conectei nenhuma biblioteca. Ou estou completamente cego?

Essa é agora uma funcionalidade padrão para variáveis de string e matrizes.

 
Artyom Trishkin #:

Essa é agora a funcionalidade padrão para variáveis de string e matrizes.

Obrigado. Mas não há nada na documentação sobre isso. Que tipo de número ele retorna? É uma duplicata de StringLen()?

 
Alexey Viktorov #:

Obrigado. Mas não há nada na documentação sobre isso. Que tipo de número ele retorna? É uma duplicata de StringLen()?

Sim