Reduzindo linha de comando [AJUDA]

 
if(VR(m_position.Identifier(),i))
{
        continue;
}
if(!AC(m_position.Symbol(),m_position.Magic()))
{
        continue;
}

Bom dia, tenho o seguinte código acima...

Se eu utilizar o formato abaixo, irá funcionar da mesma forma?

if((VR(m_position.Identifier(),i)|| !AC(m_position.Symbol(),m_position.Magic())))
{
        continue;
}
 
rmca:

Bom dia, tenho o seguinte código acima...

Se eu utilizar o formato abaixo, irá funcionar da mesma forma?

Bom dia,

não, pois falha quando ambas as condições forem verdadeiras, troque " continue " por  "  I++  " que vc. vai entender.

 
Rogerio Giannetti Torres:

Bom dia,

não, pois falha quando ambas as condições forem verdadeiras, troque " continue " por  "  I++  " que vc. vai entender.

Não entendi...

 
rmca:

Não entendi...

Então vou explicar...

I=0;
if(VR(m_position.Identifier(),i))
{
        I++;
}
if(!AC(m_position.Symbol(),m_position.Magic()))
{
        I++;
}

Print ( I );

Resultados possíveis:   I={0,1,2}


I=0;
if((VR(m_position.Identifier(),i)|| !AC(m_position.Symbol(),m_position.Magic())))
{
        I++;
}
Print ( I );

Resultados possíveis:  I={0,1}


 
rmca:

Bom dia, tenho o seguinte código acima...

Se eu utilizar o formato abaixo, irá funcionar da mesma forma?

Sim, o MQL5 (como o C++) é short-circuiting, o que significa, neste exemplo, que:

a) se a primeira condição estiver correta, ele não avalia a segunda; neste caso, executa o comando 'continue';

b) se a primeira for falsa, avalia a segunda condição que, se atendida, também executa o comando 'continue'.

Se ambas forem falsas, não entra no bloco do if e segue a execução.

 
Rogerio Giannetti Torres:

Então vou explicar...


A analogia de incremento de uma variável não tem o mesmo comportamento para o caso lançado por @rmca .

No código que ele apresenta, caso o primeiro if seja verdadeiro, o comando 'continue' desloca o fluxo para o comando de repetição mais interno (for, while) e não executa o segundo if. Somente se o primeiro for falso, avaliará o segundo if.

 
Carlos Camargo:

A analogia de incremento de uma variável não tem o mesmo comportamento para o caso lançado por @rmca .

No código que ele apresenta, caso o primeiro if seja verdadeiro, o comando 'continue' desloca o fluxo para o comando de repetição mais interno (for, while) e não executa o segundo if. Somente se o primeiro for falso, avaliará o segundo if.

Sim, 

tem toda razão.

 
Carlos Camargo:
Sim, o MQL5 (como o C++) é short-circuiting, o que significa, neste exemplo, que:

a) se a primeira condição estiver correta, ele não avalia a segunda; neste caso, executa o comando 'continue';

b) se a primeira for falsa, avalia a segunda condição que, se atendida, também executa o comando 'continue'.

Se ambas forem falsas, não entra no bloco do if e segue a execução.

Obrigado...