Variable/fr: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Variable/fr
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Une **variable** est une [[Identifier/fr|identificateur]] associé à un bout de mémoire qui peut être inspecté et manipulé durant la [[runtime/fr|durée d'exécution]] en conformité avec un [[Data type/fr|type de donnée]]. | |
| 2 | + | ||
| 3 | + | ## Déclaration | |
| 4 | + | ||
| 5 | + | Les variables sont [[Declaration/fr|déclarées]] dans une [[Var/fr|section var]]. | |
| 6 | + | ||
| 7 | + | En [[Pascal/fr|Pascal]], chaque variable a un type de donnée déjà connu au [[Compile time/fr|moment de la compilation]] (et laissons tomber le [[Variant/fr|type de donnée variant]]). Une variable est déclarée par un tuple $`(\text{identifier}, \text{data type identifier})`$, séparé par un [[Colon/fr|deux-points (:)]] : | |
| 8 | + | ||
| 9 | + | ``` pascal | |
| 10 | + | var | |
| 11 | + | foo: char; | |
| 12 | + | ``` | |
| 13 | + | ||
| 14 | + | Selon les exigences d'espace du type de donnée, la quantité de mémoire appropriée est réservée sur la pile, aussitôt que l'on est entré dans la [[Basic Pascal Tutorial/Chapter 4/Scope/fr|portée]]. L'emplacement de la section `var` détermine sui l'on parle de variables [[Global variables/fr|globales]] ou [[Local variables/fr|locales]]. | |
| 15 | + | ||
| 16 | + | ## Manipulation | |
| 17 | + | ||
| 18 | + | Les variables sont manipulées par l'[[Becomes/fr|opérateur d'affectation :=]]. De plus, une série de procédures intégrées attribuent implicitement des valeurs à une variable : | |
| 19 | + | ||
| 20 | + | - routines d'entrée/sortie comme `get` et `put`, [[Read/fr|read]] et `readLn`, `assign` et `close` | |
| 21 | + | - `new` et `dispose` lors de la manipulation des [[Pointer/fr|pointeurs]] vers des [[Object/fr|objets]] | |
| 22 | + | - `setLength` lors de la manipulation des [[Dynamic array/fr|tableaux dynamiques]]. | |
| 23 | + | ||
| 24 | + | ## Définition | |
| 25 | + | ||
| 26 | + | En [[Extended Pascal/fr|Pascal étendu]], une variable peut être définie i.e. déclarée et initialisée, en un terme en faisant comme suit: | |
| 27 | + | ||
| 28 | + | ``` pascal | |
| 29 | + | var | |
| 30 | + | x: integer value 42; | |
| 31 | + | ``` | |
| 32 | + | ||
| 33 | + | Le [[FPC/fr|FPC]] à partir de la version 3.2.0 ne prend en charge que la notation = de Borland Delphi : | |
| 34 | + | ||
| 35 | + | ``` pascal | |
| 36 | + | var | |
| 37 | + | x: integer = 42; | |
| 38 | + | ``` | |
| 39 | + | ||
| 40 | + | La notation VAX Pascal utilisant `:=` n'est pas supportée du tout. | |
| 41 | + | ||
| 42 | + | ## Accès | |
| 43 | + | ||
| 44 | + | Une variable est accédée, ce qui veut dire que la valeurà la position mémoire référencée est lue, simplement en spécifiant son identificateur (partout où une [[Expression/fr|expression]] est attendue). | |
| 45 | + | ||
| 46 | + | Notez qu'il existe quelques types de données qui sont en fait des pointeurs, mais qui sont automatiquement déréférencés, y compris, mais sans s'y limiter, les [[Class/fr|classes]], les tableaux dynamiques et les [[Ansistring/fr|chaînes ANSI]]. Avec `{$modeSwitch autoDeref+}` (non recommandé), les pointeurs également typés sont silencieusement déréférencés sans que le [[^/fr|^ (symbole de chapeau)]] ne soit présent. Cela signifie que vous n'opérez pas nécessairement sur le bloc de mémoire réel auquel la variable est véritablement associée, mais ailleurs. Habituellement, le morceau de mémoire de la variable est interprété en fonction de son type de données tel qu'il a été déclaré. Avec les [[Typecast/fr|conversions de type]] l'interprétation du bloc de mémoire d'une variable donnée peut être modifiée (par expression). | |
| 47 | + | ||
| 48 | + | ## Alias de mémoire | |
| 49 | + | ||
| 50 | + | En conjonction avec le [[Keyword/fr|mot-clé]] [[Absolute/fr|absolute]], un identifiant peut être associé à un bloc de mémoire précédemment réservé. Alors qu'un simple tuple $`(\text{identifier}, \text{data type})`$ met en fait une certaine quantité de mémoire de côté, la déclaration suivante de `c` n'occupe pas d'espace supplémentaire, mais relie l'identifiant `c` avec le bloc mémoire qui a été réservé pour `x` | |
| 51 | + | ||
| 52 | + | ``` pascal | |
| 53 | + | var | |
| 54 | + | x: byte; | |
| 55 | + | c: char absolute x; | |
| 56 | + | ``` | |
| 57 | + | ||
| 58 | + | Ici, l'alias de mémoire a été utilisé comme une des nombreuses stratégies pour convaincre le [[Compiler/fr|compilateur]] d'autoriser les opérations valides pour le type [[Char/fr|char]] alors que la mémoire sous-jacente était initialement réservée à un [[Byte/fr|byte]]. Cette fonctionnalité doit être utiliser judicieusement. Cela nécessite une connaissance de la structure de la mémoire du type de données, si rien n'est censé déclencher une sorte de violation d'accès. | |
| 59 | + | ||
| 60 | + | Plus important encore, la mémoire référencée en plus sera traitée comme si elle était déclarée régulièrement. Aucune question posée lors de la compilation. | |
| 61 | + | ||
| 62 | + | ## Voir aussi | |
| 63 | + | ||
| 64 | + | - [[Constant/fr|Constante]] | |
| 65 | + | ||
| 66 | + | --- | |
| 67 | + | *From the Free Pascal wiki, page "Variable/fr", as it stood on 2023-01-25 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
