Pergunta
O que é BODMAS e por que é útil na programação?
Solução
http://www.easymaths.com/What_on_earth_is_Bodmas.htm:
Qual você acha que é a resposta para 2 + 3 x 5?
É (2 + 3) x 5 = 5 x 5 = 25?
ou 2 + (3 x 5) = 2 + 15 = 17?
BODMAS pode vir em nosso socorro e nos dar regras a seguir para que sempre obtenhamos a resposta certa:
(B)raquetes (O)ordem (D)ivisão (M)ultiplicação (A)adição (S)subtração
De acordo com o BODMAS, a multiplicação deve ser sempre feita antes da adição, portanto 17 é na verdade a resposta correta de acordo com o BODMAS e também será a resposta que sua calculadora dará se você digitar 2 + 3 x 5.
Por que é útil na programação?Não faço ideia, mas presumo que seja porque você pode se livrar de alguns colchetes.Sou um programador bastante defensivo, então minhas falas podem ser assim:
result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;
com BODMAS você pode deixar isso um pouco mais claro:
result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
Acho que ainda usaria a primeira variante - mais colchetes, mas assim não preciso aprender mais uma regra e corro menos risco de esquecê-la e causar aqueles erros estranhos e difíceis de depurar?
Só estou adivinhando essa parte.
Mike Stone EDITAR:Matemática corrigida como Gaius aponta
Outras dicas
Outra versão disso (no ensino médio) era "Por favor, desculpe minha querida tia Sally".
- Parênteses
- Expoentes
- Multiplicação
- Divisão
- Adição
- Subtração
O dispositivo mnemônico foi útil na escola e ainda hoje é útil na programação.
Ordem das operações em uma expressão, como:
foo * (bar + baz^2 / foo)
- Braquetes primeiro
- Óordens (ou seja, potências e raízes quadradas, etc.)
- Divisão e Mmultiplicação (da esquerda para a direita)
- Aadição e Ssubtração (da esquerda para a direita)
fonte: http://www.mathsisfun.com/operation-order-bodmas.html
Eu não tenho o poder de editar Resposta de @Michael Stum, mas não está totalmente correto.Ele reduz
(i + 4) - (a + b)
para
(i + 4 - a + b)
Eles não são equivalentes.A melhor redução que posso obter para toda a expressão é
((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
ou
(i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
Quando aprendi isso na escola primária (no Canadá), era conhecido como BEDMAS:
Braquetes
Expoentes
Divisão
Mmultiplicação
Aadição
Ssubtração
Só para quem é desta parte do mundo...
De qualquer forma, não tenho certeza de quão aplicável à programação do antigo mnemônico BODMAS.Não há garantia sobre a ordem das operações entre idiomas e, embora muitos mantenham as operações padrão nessa ordem, nem todos o fazem.E há algumas linguagens em que a ordem das operações não é tão significativa (dialetos Lisp, por exemplo).De certa forma, você provavelmente estará melhor programando se esquecer a ordem padrão e usar parênteses para tudo (por exemplo, (a*b) + c) ou aprender especificamente a ordem para cada linguagem em que trabalha.
Li em algum lugar que, especialmente em C/C++, dividir suas expressões em pequenas instruções era melhor para otimização;então, em vez de escrever expressões extremamente complexas em uma linha, você armazena as partes em variáveis e faz cada uma delas em etapas, depois as constrói à medida que avança.
As rotinas de otimização usarão registros em locais onde você tinha variáveis, então não deve impactar o espaço, mas pode ajudar um pouco o compilador.