194 votes

Qu'est-ce qu'un invariant ?

Le mot semble être utilisé dans un certain nombre de contextes. Le mieux que je puisse dire est qu'il désigne une variable qui ne peut pas changer. N'est-ce pas à cela que servent les constantes/finales (maudit Java !)?

3 votes

Peut-être auraient-ils dû l'appeler non-variante ?

1 votes

Un invariant est un concept mathématique et relève davantage de l'aspect théorique de l'informatique.

1 votes

275voto

Jacob Baskin Points 556

Un invariant est plus "conceptuel" qu'une variable. En général, c'est une propriété de l'état du programme qui est toujours vraie. Une fonction ou une méthode qui garantit que l'invariant est maintenu est dite maintenir l'invariant.

Par exemple, un arbre de recherche binaire peut avoir l'invariant suivant : pour chaque nœud, la clé de l'enfant gauche du nœud est inférieure à la clé du nœud lui-même. Une fonction d'insertion correctement écrite pour cet arbre maintiendra cet invariant.

Comme vous pouvez le constater, ce n'est pas le genre de choses que l'on peut stocker dans une variable : il s'agit plutôt d'une déclaration à propos de le programme. En déterminant le type d'invariants que votre programme doit maintenir, puis en examinant votre code pour vous assurer qu'il maintient effectivement ces invariants, vous pouvez éviter les erreurs logiques dans votre code.

1 votes

Cet excellent exemple serait meilleur s'il incluait la réponse de cero avec le lien wikipedia.

6 votes

L'âge d'un parent est supérieur à l'âge de ses enfants biologiques. Le contexte environnant change, mais l'invariant ne change jamais. Par exemple, cela pourrait être la famille Smith ayant 2 enfants. Ou cela pourrait être dans d'autres espèces de n'importe quel mammifère. Le contexte change, mais l'invariant ne change pas.

2 votes

"...une propriété d'un état de programme qui est toujours vraie..." - @jacob baskin - bien écrit et merci pour cela.

42voto

moonshadow Points 28302

Il s'agit d'une condition dont vous savez qu'elle est toujours vraie à un endroit particulier de votre logique et que vous pouvez vérifier lors du débogage pour déterminer ce qui a mal tourné.

24voto

cero Points 447

La magie de wikipedia : Invariant (informatique)

En informatique, un prédicat qui, s'il est vrai, restera vrai tout au long d'une séquence spécifique d'opérations, est appelé (un) invariant à cette séquence.

6 votes

Liens ? Jargon technique ? LECTURE ? WTF ? ;) Sérieusement, bon lien, mais un petit résumé serait le bienvenu.

18voto

Michael Haren Points 42641

Je les considère généralement plus en termes d'algorithmes ou de structures.

Par exemple, vous pourriez avoir un invariant de boucle qui pourrait être affirmé - toujours vrai au début ou à la fin de chaque itération. Autrement dit, si votre boucle était censée traiter une collection d'objets d'une pile à l'autre, vous pourriez affirmer que |stack1|+|stack2|=c, au début ou à la fin de la boucle.

Si la vérification des invariants échoue, cela indique que quelque chose ne va pas. Dans cet exemple, cela pourrait signifier que vous avez oublié de pousser l'élément traité sur la pile finale, etc.

4voto

Chris Points 513

Quelque chose qui ne change pas dans un bloc de code

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X