Avec URBI, vous pouvez utiliser des variables. Affecter une valeur à x suffit à créer une variable nommée x qui sera locale à votre connexion:
x = 4; x; [146711:notag] 4.000000
Avec la version 1.0 du noyau URBI, les noms de variable sont toujours de la forme préfixe.suffixe et lorsqu'aucun préfixe n'est donné, un préfixe local à votre connexion est silencieusement ajouté afin que ce x n'interfère pas avec le x d'une autre connexion.
Par exemple, quand vous tapez x, URBI va en réalité utiliser U596851624.x dans sa mémoire, U596851624 étant l'identificateur de votre connexion courante (celle dans laquelle vous avez tapé x). De la même manière, les appels de fonction possèdent un espace local de travail (namespace) afin que d'éventuels appels récursifs puissent cohabiter sans risque d'interférence. Tout ceci va être entièrement revu dans URBI 2.0, avec une gestion avancée des noms de variables et d'espaces de travail.
Comme nous l'avons vu précédemment, il existe une exception importante à la règle qui dit que les variables sans préfixe sont locales: quand vous tapez headPan, URBI ne le traite pas comme une variable locale mais applique un alias qui traduit l'expression en headPan.val, qui est une variable URBI standard contenant la valeur du device. Donc en réalité, headPan ne réfère pas à une variable locale mais à la variable globale headPan.val. Les alias sont habituellement définis dans le fichier URBI.INI.
Il n'y a pas vraiment de concept de variables locales ou globales dans cette version d'URBI. Tout est de la forme préfixe.suffixe. Sans préfixe, la variable est locale à la connexion mais vous pouvez inventer votre propre préfixe pour rendre votre variable "globale":
monprefixe.x = "salut";
En fait, monprefixe peut être vu et défini comme un objet URBI. Nous le verrons dans le chapitre Les objets avec URBI qui détaille l'aspect orienté objet d'URBI.
Le type d'une variable (numérique, chaîne de caractères, liste ou même binaire, comme nous le verrons plus tard) est automatiquement déduit par URBI.
Vous pouvez évaluer des expressions complexes, composées de variables ou de fonctions standard comme sin, cos ou random (voir le document "URBI Specification" pour consulter la liste complète):
x=pi/2; calc:sqrt(1+sin(x)); [148991:calc] 1.414213
Une propriété intéressante est que les modificateurs présents au sein d'affectations complexes sont constamment ré-évaluées pour que, dans le cas où ils contiennent des variables, la valeur du modificateur puisse évoluer dans le temps en même temps que la variable évolue de son côté. Voici un exemple qui affecte à x une oscillation sinusoïdale à l'intérieur d'un champ sinusoïdal compris entre 15 et 25:
mon_amplitude = 20 sin:10s ampli:5, x = 0 sin:2s ampli:mon_amplitude,
D'importantes interactions entre variables et devices peuvent ainsi être établies.