![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
Bem, eu meio que concordei na segunda página que se assim fosse, não deveríamos falar sobre um bug no compilador, mas sobre um bug no cérebro dos desenvolvedores. Sem ofensa, eu fiz este fio para rir.
O que eu não entendo agora é isto.
Em que é desenvolvido o compilador MQL? Se for desenvolvido em uma linguagem normal, os programadores devem ter ficado loucos pelo fato de que as operações de multiplicação e adição têm prioridade igual. Como eles poderiam ter perdido isso? Será que todos realmente colocam parênteses onde querem e onde não querem? A propósito, também, muitos parênteses tornam o código mais claro. E quando seus programadores escrevem operações aritméticas como 2+3*4 eles também escrevem 2+(3*4), ou Deus proíba que um bug possa escorregar para um compilador C++ e aninhar 100 colchetes em uma expressão manualmente conte-o:)
Este é um bug no cérebro dos desenvolvedores de C, Java, Fortran, MathCad etc. etc.
Como você ainda não entendeu!
ZS
Embora, admito, tenha levado algum tempo para que eu também o percebesse.
Embora, admito, tenha levado um tempo para que eu também percebesse isso.
Só agora ficou claro por que algumas combinações lógicas não queriam funcionar corretamente. Tive que acrescentar parênteses artificiais.
Não consegui explicar isso antes. Mas eu também não mencionei o assunto. Consegui encontrar a solução certa, bisbilhotando por aí. Mas quantas vezes eu tive que dar uma volta para mudar tudo?
Só agora ficou claro por que algumas combinações lógicas não queriam funcionar corretamente. Tive que acrescentar parênteses artificiais.
Não havia nada que explicasse isso antes. Mas eu também não falei nisso. Consegui encontrar a solução certa, bisbilhotando por aí. Mas quantas vezes precisei dar uma olhada para encontrar tudo isso?
RTFM
*rofl*
Bem, nem todos seguidos, é claro, mas eu sempre o faço. E puramente por hábito os coloquei muito antes de descobrir sobre este "bug na cabeça dos desenvolvedores". E por que tenho que mergulhar mais uma vez na Ajuda para descobrir as prioridades, se posso passar sem ela, colocando parênteses? Portanto, para mim, este "bicho" não foi um desastre, embora eu tenha me divertido.
E antes, quando escrevi algo booleano em C, também as coloquei, embora não duvidasse das prioridades. Para ser honesto, acredito que uma expressão booleana complexa sem parênteses não é muito legível.
P.S. Por favor não use um exemplo tão idiota como 2+3*4. Se uma ação tão inteligente com prioridades tivesse acontecido para operações aritméticas, eu não teria absolutamente nenhum problema em chamar isso de um verdadeiro bug.
A propósito:
x 1 ou (x 2 e x 3 ) = (x 1 ou x 2 ) e (x 1 ou x 3 )
x 1 e (x 2 ou x 3 ) = (x 1 e x 2 ) ou (x 1 e x 3 )
Segue-se que, do ponto de vista da álgebra booleana, o e e operações têm a mesma prioridade.
Andrei, o que realmente lhe deu a idéia de que as prioridades destas operações na álgebra booleana são iguais? Contra-exemplo:
em a=1, b=0, c=0
(a ou b) e c = (1 ou 0) e 0 = 0
a ou (b e c) = 1 ou (0 e 0) = 1
Em que é desenvolvido o compilador MQL? Afinal, se for desenvolvido em uma linguagem normal, os programadores deveriam ter ficado em primeiro lugar chocados com o fato de que suas operações de multiplicação e adição têm prioridade igual. Como eles poderiam ter perdido isso?
Bem, aqui está um outro exemplo de alcance exagerado. E, no entanto, o tópico inicial relata que ele iniciou o tópico como uma piada, e que afinal já havia lido a documentação até este ponto.
Bem, aqui está um outro exemplo de alcance exagerado. E ainda assim, o iniciante diz que ele começou o tema como uma brincadeira, e afinal já leu a documentação até este ponto.
Consegui :-) Talvez seja verdade que as grandes descobertas são feitas à vontade com objetivos muito diferentes.
Já estou farto :-). Talvez seja verdade que as grandes descobertas são feitas à vontade, tendo propósitos bem diferentes.
Esta "descoberta" dificilmente se qualifica como uma grande descoberta. Vale a pena apenas constatar o fato e esquecer. Em geral, o assunto da prioridade das operações booleanas é rebuscado: seria mais barato para os desenvolvedores simplesmente proibir a construção de expressões booleanas com diferentes operações sem parênteses e considerar tais construções como inválidas.
Andrew, do que você realmente deduz que as prioridades dessas operações em álgebra booleana são iguais? Contra-exemplo:
em a=1, b=0, c=0
(a ou b) e c = (1 ou 0) e 0 = 0
a ou (b e c) = 1 ou (0 e 0) = 1
a = bonito
b = inteligente
c = rico
x = a && b && c ;
y = a ||| b ||| c ;
Qual será a sua preferência, Andrei: x = 1 ou y = 1 ?
Andrew, do que, de fato, você deduziu que as prioridades destas operações em álgebra booleana são iguais?
A partir da simetria das operações. E a simetria das operações segue diretamente das fórmulas alocadas.
Uma operação simétrica não pode ter precedência sobre outra.
Eu me pergunto, o que Andrey preferiria: x = 1 ou y = 1 ?
Eu preferiria, Eric, argumentar sem ser pessoal e desdenhoso.
___________________________________
De qualquer forma, meu ponto é.
O resultado da expressão A & & & B || C é indefinido em termos de álgebra booleana.