Const/fr: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | - | ||
| 2 | - | ||
| 3 | - | ||
| 4 | - | ||
| 5 | - | ||
| 6 | - | ||
| 7 | - | ||
| 1 | + | Le [[Keyword/fr|mot-clé]] **const** a trois utilisations dans un programme Pascal : | |
| 8 | 2 | ||
| 9 | - | ||
| 10 | - | ||
| 11 | - | ||
| 12 | - | ||
| 13 | - | ||
| 14 | - | ||
| 3 | + | - commencer une [[Basic Pascal Tutorial/Chapter 1/Constants/fr|section de déclaration de constante]] | |
| 4 | + | - déclarer un *paramètre const* pour une routine | |
| 5 | + | - déclarer une [[Routine/fr|routine]] avec un nombre variable de paramètres passés via un tableau de taille variable d'éléments de différents types. | |
| 15 | 6 | ||
| 16 | 7 | # Section Const | |
| 17 | 8 | ||
| 18 | - | ||
| 9 | + | La déclaration **const** dans un [[Program/fr|programme]] [[Pascal]] est utilisée pour informer le [[Compiler/fr|compilateur]] que certains [[Identifier/fr|identificateurs]] sont déclarés [[Constant/fr|constants]], ils sont initialisés avec une valeur spécifique au [[Compile time/fr|moment de la compilation]], contrairement à une [[Var/fr|variable]] qui est initialisée au [[Run time/fr|moment de l'exécution]]. | |
| 19 | 10 | ||
| 20 | - | ||
| 11 | + | Toutefois, le réglage par défaut dans Free Pascal est de permettre à des identifiants déclarés const d'être ré-affectés. Pour les rendre non modifiables, les directives du compilateur {\$J} (forme courte) ou {\$WriteableConst} (forme longue) doivent être utilisée, en spécifiant {\$J-} ou {\$WriteableConst OFF}. | |
| 21 | 12 | ||
| 22 | - | ||
| 13 | + | La déclaration d'une constante peut prendre deux formes: constante typée ou non typée. | |
| 23 | 14 | ||
| 24 | 15 | ## Constante non typée | |
| 25 | 16 | ||
| 26 | - | ||
| 27 | - | ||
| 28 | - | ||
| 29 | - | ||
| 30 | - | ||
| 31 | - | ||
| 32 | - | ||
| 33 | - | ||
| 17 | + | Une constante non typée n'est affectée qu'au moment de sa déclaration, sa valeur ne peut pas être changée durant l'exécution du programme. Pour ces constantes, seuls des types simples peuvent être employés, c'est le compilateur qui détermine le type.\ | |
| 18 | + | Exemples de déclaration non typées : | |
| 19 | + | ||
| 20 | + | ``` pascal | |
| 21 | + | const | |
| 22 | + | Nombre = 210; // Constante de type Integer | |
| 23 | + | Reel = 2.1; // Constante de type virgule flottante | |
| 24 | + | Texte = 'Hello'; // Constante de type String | |
| 25 | + | lettre = 'F'; // Constante de type Char | |
| 34 | 26 | ``` | |
| 35 | 27 | ||
| 36 | 28 | ## Constante typée | |
| 37 | 29 | ||
| 38 | - | ||
| 39 | - | ||
| 40 | - | ||
| 41 | - | ||
| 42 | - | ||
| 43 | - | ||
| 44 | - | ||
| 45 | - | ||
| 30 | + | Un type est associé à la constante dans la déclaration, il devient possible de définir, outre des constantes de type simple, des constantes de type complexe tels que des enregistrements ou des tableaux.\ | |
| 31 | + | Contrairement aux constantes non typées, les constantes peuvent être modifiées en cours d'exécution, il s'agit donc plutôt d'une initialisation de variable que d'une véritable constante. Cela se rapproche des déclarations **statiques** d'autres langages.\ | |
| 32 | + | Exemple de constantes typées : | |
| 33 | + | ||
| 34 | + | ``` pascal | |
| 35 | + | const | |
| 36 | + | SeuilTemp: Single = 18.0; | |
| 37 | + | // constante Array de 6 lettres | |
| 38 | + | Alpha: array[1..6] of Char = ('A', 'B', 'C', 'D', 'E', 'F'); | |
| 46 | 39 | ``` | |
| 47 | 40 | ||
| 48 | 41 | # Paramètre Const | |
| 49 | 42 | ||
| 50 | - | ||
| 43 | + | Un paramètre de routine (fonction ou procédure) peuvent être déclarés **const**. Tout affectation à un paramètre **const** à l'intérieur de la routine aboutit à une erreur à la compilation "Can't assign values to const variable". La déclaration d'un paramètre const donne la possibilité au compilateur de faire des optimisations qu'il ne pourrait faire autrement, comme passer le paramètre par référence au lieu d'appliquer la sémantique du passage par valeur. Un paramètre const ne peut être passé à une autre routine qui demande [[Variable parameter/fr|paramètre variable]]. | |
| 51 | 44 | ||
| 52 | 45 | # Tableau de Const | |
| 53 | 46 | ||
| 54 | - | ||
| 55 | - | ||
| 47 | + | Une routine peut déclarer un paramètre comme **array of const**. Ceci permet à la routine de prendre effectivement un nombre variable de paramètre de différents types à travers un paramètre tableau à une seule dimension. A l'exécution, quand la routine est appelée, les éléments réels du tableau sont passés dans des enregistrement variants de type [[TVarRec/fr|TVarRec]]. La routine peut utiliser High() pour déterminer l'indice maximal du tableau (qui donne le nombre d'éléments en retranchant 1 car l'indice minimal donné par Low() étant toujours égal à 0), et examiner le champ VType de chaque élément TVarRec, pour déterminer le type contenu. Seuls des types simples peuvent être passés de cette façon, pas de type enregistrement, les classes et les interfaces peuvent l'être. Vous créez un tableau de const en y plaçant les composants dans \[\]. Par exemple : | |
| 48 | + | ||
| 49 | + | ``` pascal | |
| 56 | 50 | function MyFunction( array of const ) : Boolean; | |
| 57 | - | ||
| 58 | - | ||
| 59 | - | ||
| 51 | + | ... | |
| 52 | + | ||
| 53 | + | MyFunction( [10, 'global', True, my_var] ); | |
| 60 | 54 | ``` | |
| 61 | 55 | ||
| 62 | - | ||
| 56 | + | Cette fonctionnalité est uniquement disponible dans le [[Compiler Mode/fr|mode compilateur]] ObjFPC ou Delphi. | |
| 63 | 57 | ||
| 64 | 58 | # Voir aussi | |
| 65 | 59 | ||
| 66 | - | ||
| 67 | - | ||
| 68 | - | ||
| 60 | + | - [[Constref/fr|Constref]] | |
| 61 | + | - [[Constant/fr|Constant]] | |
| 62 | + | - [[Basic Pascal Tutorial/Chapter 1/Constants/fr|Constants]] | |
| 69 | 63 | ||
| 70 | 64 | --- | |
| 71 | - | ||
| 65 | + | *From the Free Pascal wiki, page "Const/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).* |
