Difference between revisions of "Variable/fr"

From Lazarus wiki
Jump to navigationJump to search
m (bypass redirect to Basic Pascal Tutorial/Chapter 4/Scope/fr, fix typing mistake « un tuple »)
 
(5 intermediate revisions by one other user not shown)
Line 4: Line 4:
  
 
== Déclaration ==
 
== Déclaration ==
Les variables sont [[Declaration/fr|declarées]] dans une [[Var/fr|section <syntaxhighlight lang="pascal" inline>var</syntaxhighlight>]].
+
Les variables sont [[Declaration/fr|déclarées]] dans une [[Var/fr|section <syntaxhighlight lang="pascal" inline>var</syntaxhighlight>]].
  
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 <syntaxhighlight lang="pascal" inline>variant</syntaxhighlight>]]). Une variable est déclarée par un t-uple <math>(\text{identifier}, \text{data type identifier})</math>, séparé par un [[Colon/fr|deux-points (:)]] :
+
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 <syntaxhighlight lang="pascal" inline>variant</syntaxhighlight>]]). Une variable est déclarée par un tuple <math>(\text{identifier}, \text{data type identifier})</math>, séparé par un [[Colon/fr|deux-points (:)]] :
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
var
 
var
 
foo: char;
 
foo: char;
 
</syntaxhighlight>
 
</syntaxhighlight>
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 [[Scope/fr|portée]].
+
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 <syntaxhighlight lang="pascal" inline>var</syntaxhighlight> détermine sui l'on parle de variables [[Global variables/fr|globales]] ou [[Local variables/fr|locales]].
 
L'emplacement de la section <syntaxhighlight lang="pascal" inline>var</syntaxhighlight> détermine sui l'on parle de variables [[Global variables/fr|globales]] ou [[Local variables/fr|locales]].
  
 
== Manipulation ==
 
== Manipulation ==
Variables are manipulated by the [[Becomes|assignment operator <syntaxhighlight lang="pascal" inline>:=</syntaxhighlight>]].
+
Les variables sont manipulées par l'[[Becomes/fr|opérateur d'affectation <syntaxhighlight lang="pascal" inline>:=</syntaxhighlight>]].
Furthermore a series of built-in procedures implicitly assign values to a variable:
+
De plus, une série de procédures intégrées attribuent implicitement des valeurs à une variable :
* input/output routines like, <syntaxhighlight lang="pascal" inline>get</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>put</syntaxhighlight>, [[Read|<syntaxhighlight lang="pascal" inline>read</syntaxhighlight>]] and <syntaxhighlight lang="pascal" inline>readLn</syntaxhighlight>, <syntaxhighlight lang="pascal" inline>assign</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>close</syntaxhighlight>
+
* routines d'entrée/sortie comme <syntaxhighlight lang="pascal" inline>get</syntaxhighlight> et <syntaxhighlight lang="pascal" inline>put</syntaxhighlight>, [[Read/fr|<syntaxhighlight lang="pascal" inline>read</syntaxhighlight>]] et <syntaxhighlight lang="pascal" inline>readLn</syntaxhighlight>, <syntaxhighlight lang="pascal" inline>assign</syntaxhighlight> et <syntaxhighlight lang="pascal" inline>close</syntaxhighlight>
* <syntaxhighlight lang="pascal" inline>new</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>dispose</syntaxhighlight> when handling [[Pointer|pointers]] to [[Object|objects]]
+
* <syntaxhighlight lang="pascal" inline>new</syntaxhighlight> et <syntaxhighlight lang="pascal" inline>dispose</syntaxhighlight> lors de la manipulation des [[Pointer/fr|pointeurs]] vers des [[Object/fr|objets]]
* <syntaxhighlight lang="pascal" inline>setLength</syntaxhighlight> when handling [[Dynamic array|dynamic arrays]]
+
* <syntaxhighlight lang="pascal" inline>setLength</syntaxhighlight> lors de la manipulation des [[Dynamic array/fr|tableaux dynamiques]].
  
 
== Définition ==
 
== Définition ==
In [[Extended Pascal]] a variable can be defined, that means declared and initialized, in one term by doing the following.
+
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:
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
var
 
var
 
x: integer value 42;
 
x: integer value 42;
 
</syntaxhighlight>
 
</syntaxhighlight>
The [[FPC]] as of version 3.2.0 does only support Borland Delphi’s <syntaxhighlight lang="delphi" inline>=</syntaxhighlight> notation:
+
Le [[FPC/fr|FPC]] à partir de la version 3.2.0 ne prend en charge que la notation = de Borland Delphi :
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
var
 
var
 
x: integer = 42;
 
x: integer = 42;
 
</syntaxhighlight>
 
</syntaxhighlight>
The VAX Pascal notation using <syntaxhighlight lang="delphi" inline>:=</syntaxhighlight> is not supported at all.
+
La notation VAX Pascal utilisant <syntaxhighlight lang="delphi" inline>:=</syntaxhighlight> n'est pas supportée du tout.
  
 
== Accès ==
 
== Accès ==
A variable is accessed, that means the value at the referenced memory position is read, by simply specifying its identifier (wherever an [[expression]] is expected).
+
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).
  
Note, there are a couple data types which are in fact pointers, but are automatically de-referenced, including but not limited to [[Class|classes]], dynamic arrays and [[Ansistring|ANSI strings]].
+
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 <syntaxhighlight lang="pascal" inline style="white-space: nowrap;">{$modeSwitch autoDeref+}</syntaxhighlight> (non recommandé), les pointeurs également typés sont silencieusement déréférencés sans que le [[^/fr|<syntaxhighlight lang="pascal" inline>^</syntaxhighlight> (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.
With <syntaxhighlight lang="pascal" inline style="white-space: nowrap;">{$modeSwitch autoDeref+}</syntaxhighlight> (not recommended) also typed pointers are silently de-referenced without the [[^|<syntaxhighlight lang="pascal" inline>^</syntaxhighlight> (hat symbol)]] being present.
+
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é.
This means, you do not necessarily operate on the actual memory block the variable is genuinely associated with, but somewhere else.
+
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).
 
 
Usually the variable’s memory chunk is interpreted according to its data type as it was declared as.
 
With [[Typecast|typecasts]] the interpretation of a given variable’s memory block can be altered (per expression).
 
  
 
== Alias de mémoire ==
 
== Alias de mémoire ==
In conjunction with the [[Keyword|keyword]] [[Absolute|<syntaxhighlight lang="pascal" inline>absolute</syntaxhighlight>]] an identifier can be associated with a previously reserved blob of memory.
+
En conjonction avec le [[Keyword/fr|mot-clé]] [[Absolute/fr|<syntaxhighlight lang="pascal" inline>absolute</syntaxhighlight>]], un identifiant peut être associé à un bloc de mémoire précédemment réservé.
While a plain <math>(\text{identifier}, \text{data type})</math> tuple actually sets a certain amount of memory aside, the following declaration of <syntaxhighlight lang="pascal" inline>c</syntaxhighlight> does not occupy any additional space, but links the identifier <syntaxhighlight lang="pascal" inline>c</syntaxhighlight> with the memory block that has been reserved for <syntaxhighlight lang="pascal" inline>x</syntaxhighlight>:
+
Alors qu'un simple tuple <math>(\text{identifier}, \text{data type})</math> met en fait une certaine quantité de mémoire de côté, la déclaration suivante de <syntaxhighlight lang="pascal" inline>c</syntaxhighlight> n'occupe pas d'espace supplémentaire, mais relie l'identifiant <syntaxhighlight lang="pascal" inline>c</syntaxhighlight> avec le bloc mémoire qui a été réservé pour <syntaxhighlight lang="pascal" inline>x</syntaxhighlight>
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
var
 
var
Line 52: Line 49:
 
c: char absolute x;
 
c: char absolute x;
 
</syntaxhighlight>
 
</syntaxhighlight>
Here, the memory alias was used as a, one of many, strategies to convince the [[Compiler|compiler]] to allow operations valid for the [[Char|<syntaxhighlight lang="pascal" inline>char</syntaxhighlight> type]] while the underlying memory was originally reserved for a [[Byte|<syntaxhighlight lang="pascal" inline>byte</syntaxhighlight>]].
+
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|<syntaxhighlight lang="pascal" inline>char</syntaxhighlight>]] alors que la mémoire sous-jacente était initialement réservée à un [[Byte/fr|<syntaxhighlight lang="pascal" inline>byte</syntaxhighlight>]].
This feature has to be chosen wisely.
+
Cette fonctionnalité doit être utiliser judicieusement.
It necessarily requires knowledge of data type’s memory structure, if nothing is supposed to trigger any sort of access violations.
+
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.
  
Most importantly, the additionally referenced memory will be treated as if it was declared regularly.
+
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.
No questions asked.
 
  
 
== Voir aussi ==
 
== Voir aussi ==
 
* [[Constant/fr|Constante]]
 
* [[Constant/fr|Constante]]

Latest revision as of 05:11, 25 January 2023

English (en) suomi (fi) français (fr) русский (ru)

Une variable est une identificateur associé à un bout de mémoire qui peut être inspecté et manipulé durant la durée d'exécution en conformité avec un type de donnée.

Déclaration

Les variables sont déclarées dans une section var.

En Pascal, chaque variable a un type de donnée déjà connu au moment de la compilation (et laissons tomber le type de donnée variant). Une variable est déclarée par un tuple [math]\displaystyle{ (\text{identifier}, \text{data type identifier}) }[/math], séparé par un deux-points (:) :

var
	foo: char;

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 portée. L'emplacement de la section var détermine sui l'on parle de variables globales ou locales.

Manipulation

Les variables sont manipulées par l'opérateur d'affectation :=. De plus, une série de procédures intégrées attribuent implicitement des valeurs à une variable :

  • routines d'entrée/sortie comme get et put, read et readLn, assign et close
  • new et dispose lors de la manipulation des pointeurs vers des objets
  • setLength lors de la manipulation des tableaux dynamiques.

Définition

En Pascal étendu, une variable peut être définie i.e. déclarée et initialisée, en un terme en faisant comme suit:

var
	x: integer value 42;

Le FPC à partir de la version 3.2.0 ne prend en charge que la notation = de Borland Delphi :

var
	x: integer = 42;

La notation VAX Pascal utilisant := n'est pas supportée du tout.

Accès

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 est attendue).

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 classes, les tableaux dynamiques et les chaînes ANSI. Avec {$modeSwitch autoDeref+} (non recommandé), les pointeurs également typés sont silencieusement déréférencés sans que le ^ (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 conversions de type l'interprétation du bloc de mémoire d'une variable donnée peut être modifiée (par expression).

Alias de mémoire

En conjonction avec le mot-clé absolute, un identifiant peut être associé à un bloc de mémoire précédemment réservé. Alors qu'un simple tuple [math]\displaystyle{ (\text{identifier}, \text{data type}) }[/math] 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

var
	x: byte;
	c: char absolute x;

Ici, l'alias de mémoire a été utilisé comme une des nombreuses stratégies pour convaincre le compilateur d'autoriser les opérations valides pour le type char alors que la mémoire sous-jacente était initialement réservée à un 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.

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.

Voir aussi