Características da linguagem mql4, sutilezas e técnicas - página 12

 
Ihor Herasko:

Em muitas empresas de software, um código como esse arrancaria todos os dedos. A primeira coisa que é sempre e em qualquer lugar necessário é evitar "leitura desnecessária". Por exemplo, se você usar uma condição ao entrar em uma função:

então é recomendável escrever:

Esta abordagem é uma grande ajuda para evitar o apego de condições.

Mais uma vez, é uma dor de cabeça. Porque ninguém verificou o que a função OrderType() retornou. Ou talvez tenha retornado -1 ou 6? Este é um exemplo de colocação sobre as propriedades do compilador do qual você deve sempre se manter afastado. Você mesmo cita muitos exemplos de código de plataforma cruzada. Então, por que você está se afastando disso neste caso? Um novo compilador MQ sairá e este código não funcionará mais corretamente.

Com a continuação da mesma situação. Código como:

é mais difícil de ler do que:

E ainda assim, a eficiência da execução é a mesma em ambos os casos.

Isso é uma chatice total:

if (!OrderSelect(i, SELECT_BY_POS))
   continue;

if (OrderSymbol() != Symbol())
   continue;

if (OrderMagicNumber() != m_nMagicNumber)
   continue;
 
Vitaly Muzichenko:

É uma chatice total, não é?

O que é lata? Uma linha de uma superexpressão - isso é o que é trivial. Os humanos não são computadores e não têm que processar o resto da condição. Um humano, ao contrário de um computador, tem que computar toda a expressão até o fim e depois entender apenas que seu primeiro componente leva a um resultado falso.

Em uma entrada, onde tudo é decomposto por condições simples, este cálculo é desnecessário: a primeira condição não é cumprida - desaparece.

Você precisa economizar tempo, não cordas. Mas eles apenas lutam pela brevidade, que é realmente uma embalagem de operações e condições umas nas outras. Se apenas esta embalagem lhe proporcionasse um ganho considerável de produtividade, eu poderia compreendê-lo. Mas não. O crescimento máximo está dentro do erro de medição. As pessoas estão preocupadas em salvar as cordas, mas não pensam em economizar tempo gasto na compreensão e depuração do código.

 
Ihor Herasko:

O que é a lata? Uma linha de super-expressão - é aí que é difícil. Um humano não é um computador, então ele pode imediatamente entender que não há necessidade de processar o resto da condição. Um humano, ao contrário de um computador, tem que computar toda a expressão até o final e depois entender apenas que seu primeiro componente leva a um resultado falso.

No registro, onde tudo é decomposto por condições simples, tal cálculo é desnecessário: a primeira condição não é cumprida - desapareceu.

Você precisa economizar tempo, não cordas. Mas eles apenas lutam pela brevidade, que é realmente uma embalagem de operações e condições umas nas outras. Se apenas esta embalagem lhe proporcionasse um ganho considerável de produtividade, eu poderia compreendê-lo. Mas não. O crescimento máximo está dentro do erro de medição. As pessoas estão preocupadas em salvar as cordas, mas não pensam em economizar tempo gasto na compreensão e depuração do código.

Eu não lhe chamaria uma superexpressão de difícil leitura.

if(!OrderSelect(i, SELECT_BY_POS) || OrderSymbol() != Symbol() || OrderMagicNumber() != m_nMagicNumber)
   continue;

Ah, e "ciclo curto de cálculo" é uma coisa básica que é "automaticamente" levada em consideração ao ler uma condição sem exigir nenhum esforço mental para fazê-lo.

Mais uma vez, uma opinião puramente subjetiva.

 
Vladislav Boyko:

Você mesmo concordou que se trata de uma questão de hábito.

E vou dizer novamente. Não estou encorajando ninguém a mudar seus hábitos e procurar uma diferença no gosto em canetas de feltro.

Igor Makanu:

Como você disse - é uma questão de gosto, mas como você sabe: todas as canetas de feltro são diferentes ))))

Um bando de canetas de feltro são diferentes apenas na cor, elas têm o mesmo sabor.
 
Vladislav Boyko:

Eu não lhe chamaria um superlativo de difícil leitura.

E não há necessidade de chamar nada aqui. Até agora, meus oponentes (você inclusive) não fizeram um único argumento de que esta expressão é mais fácil de ler do que a quebra de linha.

De mim, no entanto, foram apresentados até três argumentos:

  1. Uma longa fila não se encaixa no campo de visão. Requer pelo menos uma rotação mínima da cabeça (aumenta o tempo de processamento). Uma linha curta e a que se segue não exige tanto esforço.
  2. Em uma longa fila é mais fácil cometer um erro e não percebê-lo. A divisão em linhas diminui a probabilidade deste tipo de erro.
  3. Uma longa linha é impossível de depurar. Dividi-la em cordas é bom.
Sem preferências subjetivas. Tudo é confirmado pelo senso prático e nada mais. Sim, algumas pessoas podem achar mais conveniente coçar a orelha esquerda com o calcanhar direito, mas isso não significa que esta abordagem seja prática. Na natureza, tudo está sujeito à praticidade e aqueles que são mais práticos sobrevivem.
 
Ihor Herasko:

E não há necessidade de nomear nada aqui. Até agora, meus oponentes (você inclusive) não fizeram um único argumento de que esta expressão é mais fácil de ler do que a quebra de linha.

De mim, no entanto, foram apresentados até três argumentos:

  1. Uma longa fila não se encaixa no campo de visão. Requer pelo menos uma rotação mínima da cabeça (aumenta o tempo de processamento). Uma linha curta e a que se segue não exige tanto esforço.
  2. Em uma longa fila é mais fácil cometer um erro e não percebê-lo. A divisão em linhas diminui a probabilidade deste tipo de erro.
  3. Uma longa linha é impossível de depurar. Dividi-la em cordas é bom.
Sem preferências subjetivas. Tudo é justificado pelo senso prático e nada mais. Sim, algumas pessoas podem achar mais conveniente coçar a orelha esquerda com o calcanhar direito, mas isso não significa que esta abordagem seja prática. E, na natureza, tudo está sujeito à praticidade e aqueles que são mais práticos sobrevivem.

Igor, se os olhos não se movem nas órbitas dos olhos e você tem que virar a cabeça, você pode escrever assim:

if(OrderSelect(i, SELECT_BY_POS)
&& OrderSymbol() == _Symbol
&& OrderMagicNumber() == m_nMagicNumber)
 {
  // Делаем что надо...
 }

E quantas linhas curtas eu encontrei com erros........... Aparentemente, o número e a probabilidade de erros não depende do comprimento da linha.

Só se pode concordar com a depuração. Mas o hábito foi desenvolvido antes do depurador aparecer em mql4 e nem todos são capazes de mudar os hábitos.

 
Alexey Viktorov:

Igor, se os olhos não se movem nas órbitas dos olhos e você tem que virar a cabeça, você pode escrever dessa maneira:

E quantas linhas curtas eu encontrei com erros........... Aparentemente, o número e a probabilidade de erros não depende do comprimento da linha.

Só se pode concordar com a depuração. Mas o hábito foi desenvolvido antes do depurador em mql4 e nem todos são capazes de mudar os hábitos.

Você pode fazer isso desta maneira, mas com este estilo para ver um bloco de programa você tem que rolar a tela 2 vezes e isto é pior do que ver todo o código em uma única tela. (Não se trata de você, é apenas um exemplo).

 
fxsaber:

Infelizmente, este mito não encontra apoio na história do fórum. Além disso, os desenvolvedores têm deixado clara sua posição de que tais mudanças não podem ser feitas como uma questão de princípio.

Isso já existia. A ordenação teve um impacto.

A discussão provavelmente foi realizada no antigo fórum metatrader4.com (ainda aberto recentemente, agora é redirecionado para mql5.com).

 
Andrey Khatimlianskii:

Foi assim. A ordenação foi afetada.

A discussão deve ter sido no antigo fórum do metatrader4.com (ainda aberto recentemente, agora redirecionando para mql5.com).

Foi, foi. Assim como agora com o número de ordens históricas, se você definir "Hoje", então OrdersHistoryTotal() devolverá o número de ordens fechadas que fecharam hoje. Se a guia "Histórico" não mostra nenhuma ordem antiga, então ela não está disponível nem mesmo por ingresso.

 
Alexey Viktorov:

Foi, foi. Assim como agora com o número de ordens históricas, se você definir "Hoje", OrdersHistoryTotal() devolverá o número de ordens fechadas que fecharam hoje. Se a guia "História" não mostra nenhuma ordem antiga, então não está disponível, mesmo por ingresso.

Trata-se de ordenação. Naquela época, se eles não eram classificados pelo tempo, não era possível encontrar o último por índice - era o último dos classificados.

E agora a profundidade da história não depende da aba selecionada? Na minha opinião, ainda o faz.