Em matemática, uma variável significa que você pode colocar qualquer número lá e uma equação ainda será verdadeira:
root(square(x)) = abs(x)
Nas linguagens de programação, não é assim: uma var pode mudar. Em Python:
y = (x**2)**.5
x *= 2
assert y == abs(x)
gerará uma exceção, pois x na última linha não é o mesmo.
Existem linguagens de programação que usam variáveis imutáveis?
Respostas:
Para responder à pergunta do título "Alguma linguagem de programação usa variáveis como em matemática?": C, C #, Java, C ++ e qualquer outra linguagem de estilo C usam variáveis da maneira que são usadas em matemática.
Você só precisa usar == em vez de =.
Se eu pegar o seu original
Então eu posso traduzir isso para o C # diretamente, sem nenhuma alteração além da sintaxe.
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
Isso será avaliado como verdadeiro para qualquer valor de x contanto que x ao quadrado seja menor que o máximo para o tipo de dados que você está usando. (Java será muito semelhante, mas acredito que o espaço para nome Math seja um pouco diferente)
O próximo bit falhará ao compilar em C # porque o compilador é inteligente o suficiente para saber que não posso atribuir o retorno de uma operação a outra operação.
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
A imutabilidade não tem nada a ver com isso. Você ainda precisa atribuir o valor em um idioma imutável e é perfeitamente possível que um determinado idioma opte por fazer isso usando = como operador.
Além disso, esse loop será executado até você esgotar os valores legais de x e obter uma exceção de estouro:
É por isso que os matemáticos odeiam o uso de = para atribuição. Isso os confunde. Eu acho que isso levou você a se confundir. Veja o seu exemplo
Quando eu transformo isso em álgebra, recebo o seguinte:
abs (2x) = raiz (x ^ 2)
O que, obviamente, não é verdadeiro para valores diferentes de 0. A imutabilidade evita o erro de alterar o valor de x quando você adiciona etapas extras entre a avaliação do lado esquerdo e do lado direito da equação original. Na verdade, não muda a maneira como você avalia a expressão.
fonte
Linguagens de programação puramente funcionais, como Haskell , reforçam variáveis imutáveis. Eu gosto de chamá-los de identificadores, em vez de variáveis.
fonte
O
=
sinal usado nas linguagens de programação é enganoso.<-
, significando "loja" ou mesmo COBOLMOVE
, em vez disso, deve ser usado.Além disso, o Prolog usa variáveis como math: Variáveis não podem ser alteradas, e o mecanismo do Prolog preencherá as variáveis para verificar se as soluções existem.
Além disso, Curry é uma mistura de Haskell e Prolog.
fonte
C, C ++ e Objective-C podem especificar imutabilidade para argumentos de função (e método), bem como outras variáveis (identificadores), com o qualificador de tipo "const".
fonte
Você também pode simular imutabilidade no Python, não permitindo atualizações nas classes. Como afirmado anteriormente, a maioria das linguagens de programação funcional pura aplica imutabilidade. Clojure é uma adição recente à plataforma JVM (Clojure é um dialeto LISP)
No Scala (também uma linguagem JVM ), um unificador de variáveis de suporte de OO e FP declaradas com
val
é imutável. A expressividade Scala e o suporte híbrido OO / FP fazem com que pareça semelhante ao Mathematica . ( Akka é uma estrutura que adiciona funcionalidades Erlang OTP e Clojure, como STM .. a Scala e Java.) O LACASA adiciona sistema de tipos e modelo de programação para reforçar a disciplina de capacidade de objetos no Scala e fornecer referências exclusivas a objetos. ( código ) ( fundamentação teórica )Em Java, uma variável declarada
final
é imutável, e bibliotecas Java como o Google Guava incluem bibliotecas imutáveis de coleções. JavaString
s também são sempre imutáveis.fonte