![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
O botão Compile perde-se para sempre (é necessário voltar a carregar o editor para o recuperar)
Bem, não exactamente... :) Consegui recuperá-lo :)
Tem de comentar a peça recursiva e premir o botão de compilação de depuração para o fazer.
1. não é seguro "expor" elementos internos não pertencentes à classe base ao exterior (e neste exemplo, não o atributo em si, mas apenas um elemento de matriz!) Além disso, não é possível alterar o seu valor.
Além disso, contradiz o "espírito" da programação orientada para o objecto: todo o trabalho com os dados do objecto deve ser realizado dentro do objecto, pelos seus próprios métodos...
3. que tal utilizar apenas Setter para atributo de dados?
4. o código beneficiaria da legibilidade.
5. eventualmente esta "simplicidade" com indexador de valor l não fará ninguém, incluindo você, compreender como funciona este código...
6. passará mais tempo à procura de erros do que a escrever Setter.
O que é isso, humor negro?
1. desculpem, - disparate. compreendo que a paranóia está em voga aqui, e é um argumento de refugo para "porque é que não o devem fazer". não vejo qualquer perigo nisso. Olhado cuidadosamente, se é que há alguma coisa, qualquer nome, afinal, é uma referência. A indexação é apenas uma extensão do conceito do nome. Nada mais. Vamos proibir completamente a nomeação. Por razões de segurança. Os links são extremamente perigosos, não são?
2. essa lógica contradiz violentamente o espírito da programação orientada aos objectos com C++, C#, Delphi e algumas dezenas de linguagens menos populares onde os indexadores funcionam bastante bem tanto à direita como à esquerda. Além disso, não contradiz o senso comum e o meu espírito por qualquer razão.
Os indexadores são feitos para comunicar com o ambiente externo. A sua função é exactamente a de uma interface. Posso encapsular e esconder qualquer coisa, mas preciso de índices para operar com objectos como matrizes. Na realidade, todas as matrizes estão dispostas de alguma forma. Por exemplo, arrays mql dinâmicos regulares. Podemos proibir a sua colocação no lado esquerdo do operador de atribuição? Vamos substituí-los por uma função como SetArrayValue(array, i, j, valor); isto irá simultaneamente melhorar a legibilidade. E a depuração também se tornará muito mais fácil. Ugh....
3. que tal fazer um indexador normal? a empregada é fixe, claro, mas a rainha ainda é melhor.
4. é aqui que estou realmente a começar a perder o juízo. Será isso ilegível?
Isto é mais legível, não é?
t.setDataElement(i, i*i);
Fixe, acho que vou receber tratamento.
5. frio.
6. Eu chorei.
O indicador deixou de se compilar no build 630:
c i erro pode ser eliminado colocando um anúncio em frente de
E o que fazer com'rates_total' - identificador não declarado ?
O mesmo em Win7 x64 e XP x32.
Pode dizer-me, por favor? Será que MathMin() e MathMax() são implementadas como funções (comparâmetros passados através de pilha) ou substituição macro(em linha)? Segundo o livro de referência, são funções.
O indicador deixou de se compilar no build 630:
c i erro pode ser eliminado colocando um anúncio em frente de
E o que fazer com'rates_total' - identificador não declarado ?
O mesmo em Win7 x64 e XP x32.
Tem claramente um erro algures no seu código. O bloco submetido compila sem erros se declarar as variáveis limite, RT e definir condição se()
Naturalmente, eu não dei o código, mas uma estrutura aproximada.
Sobre o 619 construir o indicador compilado e funcionou bem.
Em 630 gera os erros acima mencionados.
O código é 100% inalterado. A forma como o compilador funciona mudou obviamente.
Bug?
O código abaixo gera uma espécie de loop perpétuo no compilador. Clicando em Cancelar
não funciona imediatamente, mas quando funciona, recupera o controlo do editor.
O botão Cancelar em si não desaparece, mas também não é acessível.
O botão Compile perde-se para sempre (é necessário voltar a carregar o editor para o recuperar)
Por favor, aconselhar. Será que MathMin() e MathMax() são realizadas como funções (comparâmetros passados através da pilha) ou como macrossubstituições(em linha)? De acordo com o livro de referência, elas são funções.
Claro que funciona, porque no momento da compilação os valores dos argumentos são desconhecidos. IMHO em linha e macros são diferentes.
P.S: em linha ou não em linha, não posso dizer.
Claro que funciona, porque no momento da compilação os valores dos argumentos são desconhecidos. IMHO em linha e macros são diferentes.
P.S: se estão em linha ou não, não posso dizer.
Uma função macro e em linha são de facto coisas diferentes. Mas não é isso que eu quero dizer. Eis um exemplo quando, no momento da compilação, os valores dos argumentos são desconhecidos
No primeiro caso, o código deve ser colado na função actual (penso eu) e no segundo caso, a função é chamada com parâmetros passados através da pilha (penso eu). Mas para efeitos de optimização, o compilador pode de facto implementar a segunda variante também através de substituição. É assim? Não sei. Foi por isso que perguntei.