En mathématiques, une variable signifie que vous pouvez y mettre n'importe quel nombre, et une équation sera toujours vraie:
root(square(x)) = abs(x)
Dans les langages de programmation, ce n'est pas le cas: une var peut changer. En Python:
y = (x**2)**.5
x *= 2
assert y == abs(x)
lèvera une exception, car x dans la dernière ligne n'est pas le même.
Existe-t-il des langages de programmation qui utilisent des variables immuables?
Réponses:
Pour répondre à votre question de titre "Est-ce qu'un langage de programmation utilise des variables comme en mathématiques?": C, C #, Java, C ++ et tout autre langage de style C utilisent des variables dans la façon dont ils sont utilisés en mathématiques.
Vous avez juste besoin d'utiliser == au lieu de =.
Si je prends ton original
Ensuite, je peux traduire cela en C # directement sans aucun changement autre que pour la syntaxe.
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
Cela sera évalué à vrai pour toute valeur de x tant que x au carré est inférieur au maximum pour le type de données que vous utilisez. (Java sera très similaire, mais je pense que l'espace de noms Math est un peu différent)
Ce bit suivant ne parviendra pas à se compiler en C # car le compilateur est suffisamment intelligent pour savoir que je ne peux pas affecter le retour d'une opération à une autre opération.
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
L'immuabilité n'a rien à voir avec cela. Vous devez toujours affecter la valeur dans une langue immuable et il est tout à fait possible qu'une langue donnée puisse choisir de le faire en utilisant = comme opérateur.
Preuve supplémentaire du point, cette boucle s'exécutera jusqu'à ce que vous épuisiez les valeurs légales de x et obteniez une exception de dépassement de capacité:
C'est pourquoi les mathématiciens détestent l'utilisation de = pour l'affectation. Cela les confond. Je pense que cela vous a amené à vous confondre. Prenez votre exemple
Lorsque je transforme cela en algèbre, j'obtiens ceci:
abs (2x) = racine (x ^ 2)
Ce qui bien sûr n'est pas vrai pour les valeurs autres que 0. L'immutabilité ne vous évite que l'erreur de modifier la valeur de x lorsque vous ajoutez des étapes supplémentaires entre l'évaluation du côté gauche et du côté droit de l'équation d'origine. Cela ne change pas réellement la façon dont vous évaluez l'expression.
la source
Les langages de programmation purement fonctionnels, tels que Haskell , appliquent des variables immuables. J'aime bien les appeler des identifiants, au lieu de variables.
la source
Le
=
signe utilisé dans les langages de programmation est trompeur.<-
, ce qui signifie "stocker", ou même COBOLMOVE
doit être utilisé à la place.En outre, Prolog utilise des variables comme les mathématiques: les variables ne peuvent pas changer et le moteur Prolog remplira les variables pour voir si les solutions existent.
De plus, Curry est un mélange de Haskell et de Prolog.
la source
C, C ++ et Objective-C peuvent spécifier l'immuabilité pour les arguments de fonction (et de méthode), ainsi que pour d'autres variables (identificateurs), avec le qualificatif de type "const".
la source
Vous pouvez également simuler l'immuabilité en Python en n'autorisant pas les mises à jour des classes. Comme indiqué précédemment, la plupart des langages de programmation fonctionnels purs imposent l'immuabilité. Clojure est un ajout récent à la plate-forme JVM (Clojure est un dialecte LISP)
Dans Scala (également un langage JVM ), un unificateur des variables de support OO et FP déclarées avec
val
est immuable. L'expressivité de Scala et la prise en charge hybride OO / FP le rendent similaire à Mathematica . ( Akka est un framework qui ajoute des fonctionnalités Erlang OTP et Clojure telles que STM .. à Scala et Java.) LACASA ajoute un système de type et un modèle de programmation pour appliquer la discipline de capacité d'objet dans Scala et pour fournir des références d'objet uniques. ( code ) ( contexte théorique )En Java, une variable déclarée
final
est immuable et les bibliothèques Java telles que Google Guava incluent des bibliothèques immuables de collections. Les JavaString
sont également toujours immuables.la source