Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 427

 
Artyom Trishkin:
E leia quantas vezes uma variável estática é inicializada. E a questão em si desaparecerá por seu absurdo ;)

Então como entender isto: As variáveis locais declaradas com a palavra-chave estática retêm seus valores durante a vida útil da função. Cada vez que a função é chamada novamente, estas variáveis locais contêm os valores que elas tinham na chamada anterior. Uma variável declarada em uma função definida pelo usuário não é uma variável local?

 
Alekseu Fedotov:

Sobre a segunda pergunta,

se o primeiro tique não pegar, o segundo pegará.

Retorna o tempo de abertura do bar. Será o mesmo em todo o bar.
 
novichok2018:

Então como entender isto: As variáveis locais declaradas com a palavra-chave estática retêm seus valores durante a vida útil da função. Cada vez que a função é chamada novamente, estas variáveis locais contêm os valores que elas tinham na chamada anterior. Uma variável declarada em uma função definida pelo usuário não é uma variável local?

O modificador estático o torna estático, e é armazenado na memória para variáveis estáticas, não locais.
 
Artyom Trishkin:
Retorna o tempo de abertura do bar. Será o mesmo em todo o bar.

Está bem aqui. Obrigado.

 
Artyom Trishkin:
O modificador estático o torna estático e já está armazenado na memória para variáveis estáticas, não para variáveis locais.

É aqui que eu não entendo. Na minha opinião, não importa onde é armazenada, por código, redefinimos o valor da variável para zero toda vez que a função é acessada. Para quê?

 
novichok2018:

É aqui que eu não entendo. Na minha opinião, não importa onde é armazenada, por código, redefinimos o valor da variável para zero toda vez que a função é acessada. Para quê?

Para o primeiro lançamento - quando você o declarar. Depois disso, cabe a você controlar seu conteúdo.
 
Artyom Trishkin:
Para o primeiro lançamento - em declaração. Além disso, você controla seu conteúdo por si mesmo.

Entretanto, na minha opinião, este não é o caso: o código é lido linha por linha toda vez e toda vez que chega a zero, e na primeira execução, mesmo que não haja inicialização, a variável tomaria um valor zero. Portanto, a seqüência de datas estática New_Time=0; força o programa a fazer um trabalho desnecessário.

 
novichok2018:

Entretanto, na minha opinião, este não é o caso: o código é lido linha por linha toda vez e toda vez que chega a zero, e na primeira execução, mesmo que não haja inicialização, a variável tomaria um valor zero. Portanto, a seqüência de datas estática New_Time=0; força o programa a fazer um trabalho desnecessário.

Você diz "não", você diz "sim"...
Basta imprimir o valor da variável para o diário e assistir. Por que você está lutando quando as pessoas lhe explicam as coisas mais simples?
Você pode continuar sem mim até que você mesmo o verifique.
 
Artyom Trishkin:
Você diz não, você diz sim...
Basta imprimir o valor da variável no diário de bordo e ver. Por que se preocupar quando as coisas mais simples são explicadas a você?
Em seguida, sem mim, até que você mesmo verifique por si mesmo.
Você não precisa se ofender. Mas aparentemente os programadores lêem o texto de forma diferente. Sempre acreditei que se diz "igual a zero" em um programa, o computador deve ser igual a zero, independentemente de estar na inicialização ou em referência repetida a uma linha de código. E não há necessidade de visitar nenhum diário para provar que a inicialização zero é desnecessária, basta removê-lo: datatime estática New_Time; produz absolutamente os mesmos resultados que a datatime estática New_Time=0; não sei quanto mais rápido o programa funciona, admito, não é nada significativo, mas ainda assim remove o "gesto desnecessário".
 
novichok2018:
Não fique ofendido. Mas os programadores obviamente lêem o texto de forma diferente. Sempre considerei que se diz "igual a zero" no programa, o computador deve igualá-lo a zero independentemente de estar no lançamento ou na referência recorrente a uma linha de código. E não há necessidade de visitar nenhum diário para provar que a inicialização zero é desnecessária, basta removê-lo: data estática New_Time; produz absolutamente os mesmos resultados que a data estática New_Time=0; não sei quão mais rápido é o funcionamento do programa, admito que não é nada significativo, mas ainda assim remove "gesto desnecessário".
Não me sinto ofendido pela teimosia. Por quê?
E as variáveis precisam ser inicializadas explicitamente. Um dia você chegará à importância da inicialização. Enquanto isso, você pode jogar tudo fora dentro de parênteses encaracolados.