Loading [MathJax]/extensions/jsMath2jax.js
Abstrasy
2.0 (beta)

Piste: nothing
 

nothing

Le type «nothing» est un type singleton dont la seule et unique valeur est (nothing). Dans d'autres langage de programmation, ce type est souvent appelé «NULL», «NIL» ou encore «NONE» pour désigner une variable ou une référence qui n'est liée à aucune donnée. On peut considérer que (nothing) rempli la même fonction dans le langage Abstrasy. (nothing) supporte donc le test identitaire et est la valeur par défaut de toute nouvelle variable, si une autre valeur n'est pas spécifiée.

(define '$x)
(define '$y 10)
(display (==? $x (nothing))
(display (==? $y (nothing))

(true)
(false)

Il est également possible de tester le type «nothing» d'une donnée à l'aide du prédicat nothing?.

(display (nothing? (nothing))
(display (nothing? "test"))

(true)
(false)

A l'inverse, si on souhaite s'assurer qu'une donnée n'est pas du type «nothing», il suffit d'utiliser le prédicat something?.

(display (something? (nothing))
(display (something? "test"))

(false)
(true)

Contrairement à d'autres langages de programmation, le type «nothing» n'est pas assigné à une variable ou à un mot réservé, mais bien à une expression (nothing). Ainsi, on obtient et on utilise toujours cette valeur de la même manière,c-à-d sous la forme d'un constructeur primitif. Vous noterez d'ailleurs que la valeur de (nothing) est l'expression (nothing) et non l'opérateur nothing. Cette généralisation est très intéressante car elle permet non seulement d'uniformiser l'expressivité du langage, mais aussi d'assurer une parfaite intégrité référentielle quelque soit l'implémentation du langage. En effet, (nothing) a toujours pour résultat (nothing) quelque soit la valeur concrète de (nothing) et même l'ordinateur sur lequel le programme est exécuté. Enfin, comme il n'y a qu'une seule et unique instance «nothing» dans la mémoire de l'ordinateur, le fait de l'utiliser ne nécessite aucune instanciation supplémentaire.

Le type «nothing» est aussi l'union de tous les types du langage. On peut donc l'affecter à n'importe quelle variable indépendamment de son type initial.

(define '$x 10)
(define '$y "dix")
(set! $x (nothing))
(set! $y (nothing))
(display $x)
(display $y)

(nothing)
(nothing)

Cette caractéristique repose sur le fait que tout est objet en Abstrasy. Ainsi, même (nothing) est un objet. Cependant, cet objet a la particularité d'être indépendant du type. Il s'agit d'une sorte d'objet de classe racine immuable et non dérivable. On peut donc affecter n'importe quelle variable par (nothing), quel que soit le type de son objet, sans violer le principe de typage dynamique fort. De même, on peut affecter un objet de n'importe quel type à un une variable dont le contenu est (nothing) puisque cela entraîne un renforcement et non un affaiblissement du typage dynamique.

(define '$x 10)
(set! $x (nothing))
(set! $x "dix")
(display $x)

dix

Notez, dans l'exemple ci-dessus, que si nous avions directement affecter la chaîne de caractère “dix” à la variable $x, l'interpréteur aurait signalé une erreur car le type de $x n'autorisait l'affectation que d'un nombre entier ou (nothing). L'obligation d'affecter préalablement (nothing) à une variable, pour pouvoir en changer le type, constitue une indication explicite de l'éventualité d'un tel changement.


Opérateurs

refs/lang/typeindex/nothing.txt · Dernière modification: 2013/05/30 13:15 (modification externe)

Retour
Table des mati�res

 

     
Licence Creative Commons
   Get abstrasy at SourceForge.net. Fast, secure and Free Open Source software downloads