Pergunta um recém-chegado! - página 26

 
Alexander Bereznyak:

estas são as suas palavras, não há avisos, mas há realmente

Em que mundo vive, o que fuma, o que partilha

Então é tão audacioso para reclamar por mim sobre o meu código que não o consegue ver? Enganaram-se os cogumelos?
 
Dmitry Fedoseev:
Então afirma-me com tanta ousadia sobre o meu código que não vê? Não está enganado sobre os cogumelos?

Eu tenho-o, não um tolo, tem um compilador especial sem avisos, especialmente pessoalmente da MQ

PS: Eu também quero um, dá-mo a mim.

 
Михаил:

O código que deu não é de todo correcto!

Deveria ser assim:

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

Errado, porque depois há uma comparação:

if(type==(long)POSITION_TYPE_BUY


Não, não é.

Isto não tem nada a ver com o assunto.

O code-escritor exagerou ou copiou a conversão do tipo a partir de algum lugar.


de facto

código

    long type=PositionGetInteger(POSITION_TYPE);
    if (type==POSITION_TYPE_BUY) return;

não gera qualquer erro ou aviso.

A MQL não requer uma conversão explícita


PS. Teste os seus pressupostos antes de começar a discutir.

 

um péssimo exemplo, escorrega-se numa comparação e depois depara-se com um erro:

 
o_O:

PS. Teste os seus pressupostos antes de começar a discutir.

Pense nas consequências ao fazer propostas
 
o_O:


Não, não está.

Não tem nada a ver com isto.

O co-escritor exagerou ou copiou de algum outro lugar.


de facto

código

não gera qualquer erro ou aviso.

MQL não requer conversão explícita


PS. Teste os seus pressupostos antes de começar a discutir.

o_o!

Certo - errado....

Tenho a impressão de que não se lê o que os outros escrevem!

De acordo com as regras de programação:

A VARIÁVEL DE FUNÇÃO DE ACEITAÇÃO DEVE SER DO MESMO TIPO QUE O VALOR DE RETORNO DESTA FUNÇÃO!

É O QUE É!

Este é o fim desta especulação.

Porque não o escreveu desta forma?

int type=PositionGetInteger(POSITION_TYPE);

Porque sabe que a função retorna sempre LONG.

E a referência diz claramente queo valor retornado para o argumento POSITION_TYPE da funçãoPositionGetInteger() é

é ENUM_POSITION_TYPE, não LONGO

E se quiser praticar fundição do tipo, escreva-o desta forma:

int type = int(PositionGetInteger(POSITION_TYPE));

if (type==POSITION_TYPE_BUY) return;

O facto de o compilador não lhe dar um erro não significa que o tenha escrito correctamente!

Indica o "livre arbítrio" do compilador e é tudo! (Permite-lhe comparar LONG e INTEGER).

Esta é a forma DIREITA de lidar com esta situação:

 ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
 
Alexander Bereznyak:

Um péssimo exemplo, falhou a comparação, e depois receberá um erro:

Não justifique as suas teses com a referência a um assunto diferente da discussão.

Trata-se apenas de uma comparação e só neste caso é enumeração longa.


Já entrou na espessura dos pensamentos, embora a pergunta fosse directa, a qual foi respondida por um número inteiro

Nextor257:

Por favor aconselhe-me, não consigo entender que tipo de comparação é esta?

if(type===(long)POSITION_TYPE_BUY)

Porque é (há muito) precedido por POSITION_TYPE_BUY ?


Dmitry Fedoseev:

Esta é uma mudança do tipo de variável na mosca.

 
Dmitry Fedoseev:

longo e solitário em vez deENUM_POSITION_TYPE eENUM_POSITION_TYPE

8 caracteres (que pode escrever com os olhos fechados) em vez de 36 caracteres (e em maiúsculas)! Além disso, há todo o tipo de informação que não faz sentido. Isto não é um bom estilo de programação - escrita desnecessária e informação redundante.

Neste caso, Mikhail tem toda a razão (com todo o meu desgosto pelo estilo de programação de Mikhail).

E não se trata de potenciais avisos e, além disso, do número de caracteres, mas sim de dactilografia rigorosa. A enumeração ENUM_POSITION_TYPE é um tipo de dados único. É ENUM_POSITION_TYPE, não longo ou int. Deve utilizá-lo como ENUM_POSITION_TYPE e de nenhuma outra forma. E se digitar longo, a função auto-completar começará no terceiro carácter, e não há qualquer problema. E o problema está no uso longo, porque pode ser quase tudo, enquanto que ENUM_POSITION_TYPE não é.

o_O:

A MQL não requer uma conversão explícita

No início escrevi que sim, mas depois vi a palavra "comparação". Na verdade, nenhuma conversão explícita é necessária em comparação, porque a MQL fá-lo implicitamente. E é melhor não o fazer de todo, porque o resultado é muitas vezes indefinido. Mas em outras línguas normais estritamente tipificadas é sempre necessária uma conversão de tipo explícita.

P.S. Por uma vez Michael deu uma resposta competente, mas também aqui as pessoas começaram a deitá-lo fora, como de costume. E em vão, porque ele tem razão neste caso.