Erros, bugs, perguntas - página 1332

 
Alexey Navoykov:
Os seus conselhos não fazem sentido na prática. Ninguém dá nomes idênticos de propósito. O código das funções locais vive a sua própria vida separada enquanto o programa externo vive a sua própria vida. E os nomes das variáveis externas podem mudar com o tempo e novas variáveis externas podem ser acrescentadas.E se depois disso, de repente uma de centenas de funções tiveruma variável local com o mesmo nome, o que acha que devemos renomear a variável global? Não deve procurar desculpas para os bugs dos criadores.

Não estava à procura de uma desculpa para bugs de desenvolvimento, mas este bug é facilmente contornado ao não utilizar os mesmos nomes de variáveis que são responsáveis pelos parâmetros de entrada quando se trabalha num projecto. Basta alterar o nome nos parâmetros de entrada, duvido que tenha centenas de variáveis nos parâmetros de entrada e que precise de editar todo o código :) a parte principal do código é normalmente escrita no ponto de entrada do software e não é assim tão grande, tudo é feito por chamadas de função(método). E às funções (métodos) não há diferença que nome de uma variável é passado nos parâmetros de entrada da função.

Claro que, se escrever código onde as funções utilizam variáveis globais, então é claro, terá de mudar muitas coisas, mas este código é escrito sem absolutamente nenhuma visão, é realmente difícil de modernizar.

Embora se olhar para o desenvolvedor (MetaQuotes) com um ponto de vista de consumidor, é claro que quer muito de tudo ao mesmo tempo :) Gostaria de trabalhar num terminal que seja multiplataforma, mas a resposta a este pedido será uma só - ou use o que tem ou passe por ele :)

 
Konstantin Karpov:

Basta alterar o nome nos parâmetros de entrada...

Tem uma espécie de visão flipante. Basta mudá-lo assim... Depois será acrescentada outra função ao código onde o nome da variável local corresponde e terá de o mudar novamente, certo? Um nome de variável externa não é apenas um monte de letras, tem um significado específico. Por vezes é preciso pensar muito para encontrar um nome conciso e sucinto para ele, e diz-se - alterá-lo. E todas as configurações predefinidas, bem como as configurações do testador e do optimizador serão perdidas para este parâmetro se o nome for alterado.

Suponha que inseriu alguma função de algum lugar exterior, talvez nem sequer tenha sido escrita por si, para que os nomes das variáveis locais aí possam ser absolutamente quaisquer.

 
Alexey Navoykov:

Tem uma espécie de visão flipante. Depois é acrescentada outra função ao código onde a variável local tem o mesmo nome, e é preciso alterá-la novamente, certo? O nome de uma variável externa não é apenas um monte de letras, tem um significado específico. Por vezes é preciso pensar muito para encontrar um nome sucinto e sucinto para ele, e está a dizer - altere-o. E todas as definições predefinidas, bem como as definições do testador e do optimizador serão perdidas para este parâmetro se o nome for alterado.

Suponha que inseriu alguma função de algum lugar exterior, talvez nem sequer tenha sido escrita por si, pelo que os nomes das variáveis locais podem ser absolutamente quaisquer.

Faça o que achar melhor, mas parece que não escreveu nenhum grande projecto.

Não faz sentido para mim olhar para as definições das minhas funções, porque tenho uma distinção clara no estilo de declaração de nomes de variáveis globais e locais. Por conseguinte, não encontro tais problemas como a coincidência de nomes de variáveis globais e locais. O principal é que as funções funcionam de acordo com a sua lógica sem colisões. No seu caso há uma grande MAS, se coincidir um nome de uma variável global com um nome de uma variável local, espere surpresas, que já começou a esclarecer.

Por exemplo, colocar um _ extra no nome da variável local, por exemplo _iCount. Neste caso, nunca terá problemas com os nomes das variáveis, porque cumprirá o que está a tentar explicar-me da segunda vez - as variáveis vivem num âmbito local, onde foram criadas. E, neste caso, nenhuma variável global não introduzirá ambiguidade nos nomes. E vamos encerrar a nossa discussão neste momento.

 

Voltando ao meu posto anterior. MT4/845, Windows7/64 bit, script:

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("AA: d3 = ",d3);
   Print("BB: d3 = ",DoubleToString(d3));
   Print("CC: d3 = ",DoubleToString(d3,8));
   Print("DD: d3 = ",DoubleToString(d3,9));
   Print("EE: d3 = ",DoubleToString(d3,10));
}

Resultado:


Administração, adicionar em DoubleToString que esta função arredonda os números de ponto flutuante com a precisão especificada.

 

É uma boa ideia não nomear variáveis locais e de entrada da mesma forma

 
Комбинатор:

É uma boa ideia não nomear variáveis locais e de entrada da mesma forma

De uma boa maneira, sim, mas por vezes, quando se arranja o código de outra pessoa, liga-se a ela as próprias bibliotecas, e... bam...
 

Tente continuar a linha em ME no ficheiro anexo sem espaços

Arquivos anexados:
comment.mq5  1 kb
 
Quando se discute um assunto, é possível estabelecer uma ligação a um produto no mercado? Ou isso seria considerado publicidade e proibido?
 
Yousufkhodja Sultonov:
Quando se discute um assunto, é possível estabelecer uma ligação a um produto no mercado? Ou seria isto considerado publicidade e proibido?
Cada produto tem dois separadores: Discussão (para aqueles que só pensam em comprar) e Comentários (para aqueles que compraram). É aqui que se realizam as discussões sobre o produto.
 

Resultado de compilação questionável após operador ? :

int f()
{
        int array[];
        return ( false ? array : array );
}
void OnStart()
{
        Print( f() );
}
// 0 error(s), 0 warning(s)
Resultado: 65618 (como é que ficou assim?), e deve haver um erro de compilação em tempo