| CHAPITRE
|
APPRENDRE
À PROGRAMMER AVEC FUTUREBASIC
|
NOTES
|
||||||||||||||||||||||||||||||||||||
|
Les Variables I |
Leçon 4 : variables à géométrie
variable Avec les instructions, les opérateurs et les variables, on peut dores et déjà commencer à programmer. Mais il y a une chose très importante à savoir concernant les variables, aussi nous nallons pas nous lancer tête baissée, sans avoir abordé le sujet, car une fois que les concepts développés plus avant auront été assimilés, vous naviguerez beaucoup plus aisément dans lunivers parfois tortueux de la programmation. La chose importante à connaître est la suivante : les variables possèdent un type qui leur est propre et qui spécifie les valeurs quelles sont susceptibles de contenir. Le type que vous attribuez à une variable indiquera dune part, lespace en mémoire nécessaire pour stocker la valeur quelle contiendra, (eh oui, les variables noccupent pas la même place en mémoire vive), et dautre part, vous indiquerez au Compilateur comment il doit interpréter le contenu rangé à ladresse mémoire de la variable. Vous vous rappelez que le processeur ne connaît que deux états ? Linformation la plus fondamentale est appelée bit (binary digit ou chiffre binaire). Traditionnellement on dit quun bit vaut 0 ou bien 1. Si lon devait en rester là, on nirait pas bien loin. Bien quil soit tout à fait possible de travailler à ce niveau fondamental et de modifier les bits individuellement, ils sont le plus souvent considérés par lots de 8 bits. Une série de 8 bits consécutifs est la valeur élémentaire que nous aurons le plus souvent à traiter. Cette série est appelée un octet (ou byte en anglais). Voici une représentation possible dun octet : 00101101 Comment cette série de 8 bits peut-elle être représentée pour un être humain normalement constitué ? Pour convertir ces bits en une représentation décimale, on peut utiliser la puissance de 2. On va faire une simple addition en commençant par le bit le plus à droite. valeur du premier bit multiplié par 2 puissance 0 (notez que 2^0 = 1) additionnée à valeur du second bit multiplié par 2 puissance 1 additionnée à valeur du troisième bit multiplié par 2 puissance 2 etc. ![]() Si vous faites le calcul avec tous les bits positionnés à 1, le total vaut 255. Lorsquils sont tous à 0, le total vaut 0 également. Un octet peut donc représenter 256 valeurs entières positives allant de 0 à 255 (inclus). Les nombres négatifs peuvent aussi être représentés avec un octet, mais linformation concernant le signe du nombre (positif ou négatif) doit bien être stockée quelque part. Sur le Mac, cest le bit le plus à gauche qui sera utilisé pour contenir cette information, et lon voit quil ne pourra plus faire partie du calcul pour retrouver la valeur décimale du nombre comme montré dans le schéma ci-dessus . Seuls les 7 bits sur la droite sont disponibles pour le calcul. Le nombre de valeurs possibles pouvant être représentées sera le même, mais les valeurs seront maintenant distribuées dans la plage [-128, +127] Pour représenter un nombre plus grand que 255, par exemple 810, il suffit dutiliser un octet supplémentaire (sur la gauche) et de continuer le calcul sur le principe qui a été montré précédemment. Les variables peuvent donc avoir des tailles différentes selon ce que nous voulons représenter. Pour que le Compilateur sy retrouve, nous devons déclarer la dimension de chacune des variables que nous allons utiliser dans notre programme. Linstruction DIM est prévue à cet effet. Les variables sont en réalité classées par type. Le type donne une indication à la fois sur la taille en octets (la place quelles occupent en mémoire) et sur les valeurs quelles peuvent représenter. Les entiers Les valeurs entières (non fractionnaires) sont généralement stockées dans des variables ayant lun des types figurant dans le tableau ci-dessous. Ce tableau vous montre loccupation en mémoire, la plage des valeurs représentables et enfin la façon de déclarer des variables dans le code source soit à laide dun suffixe, soit à laide de la clause AS pour chacun des types listés :
Vous avez sans doute noté que BYTE et CHAR sont synonymes, il en va de même pour INT, WORD et SHORT. Vous choisirez la syntaxe qui vous convient le mieux. Cest loccasion de dire ici, que FutureBASIC^3 autorise beaucoup de variations dans lécriture du code, mais cet atout que les programmeurs apprécient peut savérer être un handicap pour un novice qui fait ses tout premiers pas en programmation. Le typage des variables est une notion essentielle à assimiler pour évoluer aisément par la suite. Traditionnellement en BASIC, le typage est réalisé à laide dun suffixe ajouté au nom de la variable. Cette façon de faire est toujours disponible avec FB, le tableau ci-dessus montre dailleurs les suffixes identificateurs de type pour tel ou tel type de variable. Les manuels de FutureBASIC font un usage intensif de cette ancienne forme, il faut donc lapprendre aussi. Si vous typez vos variables avec cette méthode, vous devrez prendre un très grand soin lors de la rédaction de vos instructions en noubliant pas dajouter lidentificateur de type chaque fois que vous devrez utiliser les variables. Quant à nous, nous privilégierons autant que faire se peut la forme plus moderne, car, à notre sens, elle rend le code plus lisible. Notez dès à présent que déclarer une variable (on dit aussi dimensionner) nest pas équivalent à linitialiser. Linstruction DIM prévient le Compilateur que nous voulons utiliser un certain type de variable, ce qui lui donne une indication sur la taille du bloc en mémoire quil doit lui réserver, tandis que linitialisation consiste à attribuer une valeur initiale à une variable. Le fait de déclarer une variable ne donne aucune information au Compilateur quant à son contenu si ce n'est comment il devra l'interpréter. Le plus généralement, on initialise une variable au moyen de lopérateur dassignation : REM déclaration DIM x AS SHORT REM initialisation x = 10 Vous ne devez pas assumer que la variable x vaut 0 après sa déclaration. Cela dit, FutureBASIC comme les autres BASIC autorise lutilisation de variables non préalablement déclarées : REM auto-déclaration et initialisation x% = 10 Bien que cette option soit disponible (cf. longlet variables de la fenêtre de dialogue des préférences), il nest pas recommandé de lactiver, car même si elle semble faciliter la vie des débutants, elle peut tout aussi bien la leur compliquer. Par exemple, avec cette option validée, le compilateur ne vous signalera pas derreur dans les lignes de code suivantes : valeurIndice = 45 total = codeBase * valerIndice Dans ce cas de figure, lorsque le Compilateur rencontrera pour la première fois une variable dans une ligne de code, il la déclarera gracieusement pour vous et il ne corrigera pas vos fautes de frappe à votre place. Il est facile de commettre de telles erreurs, et vous verrez quon en fait plus souvent quon ne le voudrait, en revanche, il nest pas toujours aisé de repérer ce type derreur dans des programmes conséquents. En résumé, cette facilité peut avoir un prix à payer, dont on peut se passer en sobligeant à déclarer avec linstruction DIM toutes les variables que nous avons lintention dutiliser. Une fois déclarées, les variables ne peuvent plus changer de type pendant toute la durée de leur existence (eh oui, on verra que les variables meurent aussi), cest pourquoi il faut prêter une attention particulière au type que vous donnerez à une variable lors de sa déclaration en fonction des valeurs quelle pourrait contenir durant lexécution de votre programme. Il est cependant possible avec certaines limitations dassigner à une variable dun certain type la valeur contenue dans une variable dun type différent. Le Compilateur fera de son mieux pour convertir la valeur de la variable source dans celle de destination. Les booléens Il existe un type de variable appelé BOOLEAN dont lespace de stockage est de 1 octet et qui sert à maintenir une information dont les valeurs sont adaptées pour représenter des états opposés : éteint ou allumé, inactif ou actif, faux ou vrai, nul ou non nul. Le plus souvent, on assigne aux variables de type BOOLEAN des constantes prédéfinies : DIM x AS BOOLEAN x = _false x = _true Si la valeur 0 de la constante _false symbolisant la valeur FAUX ne pose pas de problème, il nen va pas de même avec la valeur VRAI, car FutureBASIC dispose de trois constantes pour symboliser la valeur VRAI : _true, _pTrue, _zTrue qui ont respectivement les valeurs 1, 256 et 1 et qui sont les représentations pour la valeur VRAI dans les langages C, Pascal et FutureBASIC. Dû à larrangement interne des bits qui la composent, la constante _zTrue propre à FutureBASIC a une particularité intéressante lorsquelle est utilisée avec lopérateur NOT : _false = NOT(_zTrue) _zTrue = NOT(_false) Les égalités ci-dessus ne sont pas vraies avec les constantes _pTrue et _true , car NOT(_pTrue) sera égal à 257 et NOT(_true) à -2. Notez que le résultat dune expression peut être assigné à une variable booléenne. Considérez les instructions suivantes : DIM vraiOuFaux AS BOOLEAN vraiOuFaux = (1 = 2) vraiOuFaux = (1 = 1) Avant dassigner la variable vraiOuFaux, FutureBASIC évalue lexpression à la droite de lopérateur dassignation, le signe égal entre les parenthèses est ici lopérateur de comparaison. La première expression sera évaluée à 0 ou _false (1 nétant pas égal à 2), tandis que la seconde sera évaluée à 1 correspondant à _zTrue. FutureBASIC permet dutiliser lopérateur de comparaison hérité du langage C pour éviter la confusion entre lassignation et la comparaison. Cet opérateur optionnel est composé de deux signes égal. On aurait donc pu écrire ceci : DIM vraiOuFaux AS BOOLEAN vraiOuFaux = (1 == 2) vraiOuFaux = (1 == 1) Cette singularité concernant la valeur VRAI peut surprendre et provoquer des dysfonctionnements dans vos programmes qui ne sont pas toujours faciles à traquer, car certaines fonctions de la Toolbox retournant une valeur booléenne utilisent la valeur VRAI du Pascal (_pTrue). Le plus simple est déviter de tester si une variable booléenne contient une valeur VRAI (_true, _pTrue ou _zTrue), on testera à la place si sa valeur est nulle (_false) ou bien non nulle. [Precédent] [Table des Matières] [Suivant] |
{Note} |
|
FutureBASIC est une marque déposée appartenant à Staz Software, Inc et utilisée avec permission. |
||