Langage
Ligne 1 : | Ligne 1 : | ||
− | == | + | ==Introduction== |
− | + | Le langage 1000 est un langage managé dont la syntaxe hérite du Pascal Objet. | |
− | + | Les différences principales avec le Pascal Objet sont les suivantes : | |
− | * | + | *Il ni a pas de support pour définir des types, classes et structures. Dans la méthodologie de développement d’une application ligne 1000 cette partie est faite dans le Modèle Métier. |
− | + | ||
− | + | ||
− | == | + | *La mémoire est managée de sorte qu’il n’est pas nécessaire d’allouer ou de libérer explicitement la mémoire. |
− | === | + | |
− | + | *Il ni a pas de support pour les types ensembles (SET) et les opérateurs associés. | |
+ | |||
+ | ==Le langage== | ||
+ | ===Bloc de code=== | ||
+ | Un bloc de code à la structure suivante : | ||
<pre> | <pre> | ||
− | declarations ; | + | var |
+ | declarations ; | ||
begin | begin | ||
instructions ; | instructions ; | ||
Ligne 19 : | Ligne 22 : | ||
</pre> | </pre> | ||
− | + | La partie déclaration peut contenir des déclarations de variables ou de procédures imbriquées. | |
===Variables=== | ===Variables=== | ||
− | + | Les variables DOIVENT être explicitement déclarée en utilisant la syntaxe suivante : | |
<pre> | <pre> | ||
Ligne 31 : | Ligne 34 : | ||
identifier : Array of type; | identifier : Array of type; | ||
</pre> | </pre> | ||
+ | |||
===Types=== | ===Types=== | ||
− | + | Le langage supporte des déclarations de type fort et contrôle l'intégrité des types; toutefois, pour des raisons de compatibilité ascendante, les erreurs de contrôle de type génèrent des messages d'alerte et pas des erreurs. | |
{| class="wikitable" | {| class="wikitable" | ||
Ligne 42 : | Ligne 46 : | ||
|integer | |integer | ||
|int,unsigned,short,long,unsignedlong | |int,unsigned,short,long,unsignedlong | ||
− | |32 bit | + | |Entier 32 bit signé |
|- | |- | ||
|longint | |longint | ||
| | | | ||
− | |64 bit | + | |Entier 64 bit signé |
|- | |- | ||
|double | |double | ||
|float | |float | ||
− | |double | + | |Nombre flottant double précision |
|- | |- | ||
|currency | |currency | ||
|decimal | |decimal | ||
− | | | + | |Valeur monétaire virgule fixe à 4 décimales |
|- | |- | ||
|boolean | |boolean | ||
| | | | ||
− | | | + | |Valeur logique vrai ou fausse |
|- | |- | ||
|string | |string | ||
|anyURI | |anyURI | ||
− | | | + | |Chaîne de caractère (**) |
|- | |- | ||
|char | |char | ||
| | | | ||
− | | | + | |Caractère |
|- | |- | ||
|enum | |enum | ||
| | | | ||
− | | | + | |Enumération |
|- | |- | ||
|TDatetime | |TDatetime | ||
|datetime | |datetime | ||
− | |Date | + | |Date et heure encodée en double |
|- | |- | ||
|date | |date | ||
| | | | ||
− | |Date | + | |Date encodée en double |
|- | |- | ||
|time | |time | ||
| | | | ||
− | | | + | |Heure encodée en double |
|- | |- | ||
|variant | |variant | ||
| | | | ||
− | | | + | |Containeur de variable de type dynamique. |
|- | |- | ||
|TClass | |TClass | ||
| | | | ||
− | | | + | |Type classe générique |
|- | |- | ||
|TObject | |TObject | ||
| | | | ||
− | | | + | |Type objet générique |
|- | |- | ||
|TPersistent | |TPersistent | ||
| | | | ||
− | | | + | |Type persistent générique |
|} | |} | ||
− | (*) | + | (*) Les alias sont définis pour supporter les sérialisation SOAP |
− | (**) | + | (**) L'encodage des chaînes de caractère peut dépendre des versions; jusqu'à la version 5.60 incluse les chaînes sont basées sur un encodage ANSI. Dans le futur les chaînes pouraient être basées sur un encodage unicode. |
− | + | Les types suivants sont spécifiquement introduis pour le support de la sérialisation SOAP : | |
{| class="wikitable" | {| class="wikitable" | ||
Ligne 133 : | Ligne 137 : | ||
|} | |} | ||
− | === | + | ===Constantes=== |
− | + | Il ni a pas de support pour déclarer des constantes. | |
− | + | ||
{| class="wikitable" | {| class="wikitable" | ||
Ligne 157 : | Ligne 160 : | ||
| 'This is a string with a '' quote' | | 'This is a string with a '' quote' | ||
|} | |} | ||
− | ===Procedures | + | ===Procedures et fonctions=== |
− | + | Tout comme en langage Pascal les procédures et fonctions peuvent être imbriquées dans un bloc de code : | |
<pre> | <pre> | ||
Ligne 176 : | Ligne 179 : | ||
</pre> | </pre> | ||
− | == | + | ==Opérateurs== |
− | === | + | ===Arithmétiques=== |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Ligne 202 : | Ligne 205 : | ||
|} | |} | ||
− | === | + | ===Logiques=== |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Ligne 218 : | Ligne 221 : | ||
|} | |} | ||
− | === | + | ===Comparaisons=== |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Ligne 241 : | Ligne 244 : | ||
==Expression== | ==Expression== | ||
− | + | Les expressions sont évaluées de la gauche vers la droite, les termes doivent être placés entre parenthèses : | |
<pre> | <pre> | ||
Ligne 247 : | Ligne 250 : | ||
</pre> | </pre> | ||
− | + | L'évaluation des expressions est optimisée : | |
<pre> | <pre> | ||
Ligne 258 : | Ligne 261 : | ||
==Instructions== | ==Instructions== | ||
− | === | + | ===Instruction=== |
− | + | Les instruction doivent être séparées par un point virgule ";" | |
<pre> | <pre> | ||
Ligne 267 : | Ligne 270 : | ||
</pre> | </pre> | ||
− | + | Plusieurs instructions peuvent être assemblées en utilisant begin / end : | |
<pre> | <pre> | ||
Ligne 277 : | Ligne 280 : | ||
</pre> | </pre> | ||
− | === | + | ===Affectation=== |
− | + | L'affectation utilise l'opérateur ":=" : | |
<pre> | <pre> | ||
Ligne 285 : | Ligne 288 : | ||
===for=== | ===for=== | ||
− | + | L'instruction for permet l'implémentation de boucle basées sur un index : | |
<pre> | <pre> | ||
Ligne 295 : | Ligne 298 : | ||
</pre> | </pre> | ||
− | + | La variable d'index DOIT être une variable entière. | |
===while=== | ===while=== | ||
− | + | L'instruction while permet l'implémentation de boucle basées sur une expression : | |
<pre> | <pre> | ||
Ligne 304 : | Ligne 307 : | ||
statement ; | statement ; | ||
</pre> | </pre> | ||
+ | |||
+ | Le corps de la boucle peut ne pas être exécuté. | ||
===repeat=== | ===repeat=== | ||
− | + | L'instruction repeat permet l'implémentation de boucle basées sur une expression : | |
<pre> | <pre> | ||
Ligne 314 : | Ligne 319 : | ||
</pre> | </pre> | ||
− | + | Le corps de la boucle sera au moins exécuté une fois. | |
===foreach=== | ===foreach=== | ||
− | + | L'instruction foreach permet l'itération à l'intérieur d'une collection : | |
<pre> | <pre> | ||
foreach V in C do | foreach V in C do | ||
+ | statement ; | ||
+ | |||
+ | foreach V in C index I do | ||
statement ; | statement ; | ||
</pre> | </pre> | ||
− | C | + | C DOIT être une collection (ex : liste, curseur) |
− | V | + | V DOIT être une variable du type de la collection. |
+ | |||
+ | Optionnellement une variable d'index I peut être utilisée, dans ce cas elle DOIT être une variable entière. | ||
===break=== | ===break=== | ||
− | + | L'instruction break permet d'interrompre l'exécution d'une boucle : | |
<pre> | <pre> | ||
Ligne 338 : | Ligne 348 : | ||
</pre> | </pre> | ||
− | + | L'effet de l'instruction break est de sortir de la boucle. | |
− | + | L'instruction break peut être utilisée dans les boucles for,foreach,while,repeat. | |
===continue=== | ===continue=== | ||
− | + | L'instruction continue permet d'interrompre l'exécution du corps de boucle et de passer à l'itération suivante : | |
<pre> | <pre> | ||
Ligne 353 : | Ligne 363 : | ||
</pre> | </pre> | ||
− | + | L'effet de l'instruction continue est de passer à l'itération suivante. | |
− | + | L'instruction continue peut être utilisée dans les boucles for,foreach,while,repeat. | |
===if=== | ===if=== | ||
− | + | L'instruction if permet de réaliser un branchement en fonction d'un test : | |
<pre> | <pre> | ||
Ligne 367 : | Ligne 377 : | ||
===case=== | ===case=== | ||
− | + | L'instruction case n'est pas supportée. | |
− | === | + | ===Support des exceptions=== |
− | + | Une exception peut être levée par le code managé, la librairie d'exécution ou le framework. Dans tous les cas les exceptions peuvent être traitées par des blocs try finally / except. | |
+ | |||
+ | ====Lever une exception==== | ||
+ | L'instruction rise permet de lever une exception : | ||
− | |||
− | |||
<pre> | <pre> | ||
rise ERule.Create('some message here'); | rise ERule.Create('some message here'); | ||
</pre> | </pre> | ||
− | + | La classe de l'exception doit être une des classes suivantes : | |
− | + | {| class="wikitable" | |
− | + | |- | |
− | + | |ERule | |
+ | |Erreur métier | ||
+ | |} | ||
− | + | ====Try / finally==== | |
+ | Un bloc d'instruction Try / finally permet d'intercepter une exception en vu d'assurer l'exécution d'un code de sortie : | ||
<pre> | <pre> | ||
Ligne 395 : | Ligne 409 : | ||
</pre> | </pre> | ||
− | + | Si une exception est levée dans le bloc 1 l'exécution se poursuit dans le bloc 2 avant de revenir au bloc supérieur. Le bloc 3 n'est jamais exécuté. | |
====Try / except block==== | ====Try / except block==== | ||
− | + | Un bloc d'instruction Try / except permet d'intercepter une exception en vu de traiter l'erreur : | |
<pre> | <pre> | ||
Ligne 409 : | Ligne 423 : | ||
</pre> | </pre> | ||
− | + | Si une exception est levée dans le bloc 1 l'exécution se poursuit dans le bloc 2 puis dans le bloc 3. | |
− | + | L'objet d'exception peut être manipulé dans le bloc d'exception : | |
<pre> | <pre> | ||
Ligne 426 : | Ligne 440 : | ||
</pre> | </pre> | ||
− | + | L'exception peut être de nouveau levée a l'intérieur d'un bloc d'exception : | |
<pre> | <pre> | ||
Ligne 438 : | Ligne 452 : | ||
</pre> | </pre> | ||
− | + | Si une exception est levée dans le bloc 1 l'exécution se poursuit dans le bloc 2 puis est redéclenchée; le bloc 3 n'est pas exécuté. | |
− | == | + | ==Fonctions magiques== |
===Assign()=== | ===Assign()=== | ||
===TP()=== | ===TP()=== | ||
+ | ===IS=== | ||
+ | ===AS=== | ||
[[category:DSM]] | [[category:DSM]] | ||
[[category:Développement]] | [[category:Développement]] | ||
[[category:Langage]] | [[category:Langage]] |
Version du 9 juin 2009 à 14:04
Sommaire |
Introduction
Le langage 1000 est un langage managé dont la syntaxe hérite du Pascal Objet.
Les différences principales avec le Pascal Objet sont les suivantes :
- Il ni a pas de support pour définir des types, classes et structures. Dans la méthodologie de développement d’une application ligne 1000 cette partie est faite dans le Modèle Métier.
- La mémoire est managée de sorte qu’il n’est pas nécessaire d’allouer ou de libérer explicitement la mémoire.
- Il ni a pas de support pour les types ensembles (SET) et les opérateurs associés.
Le langage
Bloc de code
Un bloc de code à la structure suivante :
var declarations ; begin instructions ; end;
La partie déclaration peut contenir des déclarations de variables ou de procédures imbriquées.
Variables
Les variables DOIVENT être explicitement déclarée en utilisant la syntaxe suivante :
var identifier : type; identifier, identifier : type; identifier : Array[0..X] of type; identifier : Array of type;
Types
Le langage supporte des déclarations de type fort et contrôle l'intégrité des types; toutefois, pour des raisons de compatibilité ascendante, les erreurs de contrôle de type génèrent des messages d'alerte et pas des erreurs.
type | alias(*) | remarks |
---|---|---|
integer | int,unsigned,short,long,unsignedlong | Entier 32 bit signé |
longint | Entier 64 bit signé | |
double | float | Nombre flottant double précision |
currency | decimal | Valeur monétaire virgule fixe à 4 décimales |
boolean | Valeur logique vrai ou fausse | |
string | anyURI | Chaîne de caractère (**) |
char | Caractère | |
enum | Enumération | |
TDatetime | datetime | Date et heure encodée en double |
date | Date encodée en double | |
time | Heure encodée en double | |
variant | Containeur de variable de type dynamique. | |
TClass | Type classe générique | |
TObject | Type objet générique | |
TPersistent | Type persistent générique |
(*) Les alias sont définis pour supporter les sérialisation SOAP
(**) L'encodage des chaînes de caractère peut dépendre des versions; jusqu'à la version 5.60 incluse les chaînes sont basées sur un encodage ANSI. Dans le futur les chaînes pouraient être basées sur un encodage unicode.
Les types suivants sont spécifiquement introduis pour le support de la sérialisation SOAP :
type | alias | remarks |
---|---|---|
normalizedString | ||
token | ||
duration | ||
base64binary | Binary base 64 encoded stream | |
hexbinary | Hexadecimal encoded stream |
Constantes
Il ni a pas de support pour déclarer des constantes.
integer | 10 |
hexadecimal | $0A |
float | 1.00 |
char | 'A' |
char | #10 |
string | 'This is a string with a quote' |
Procedures et fonctions
Tout comme en langage Pascal les procédures et fonctions peuvent être imbriquées dans un bloc de code :
var p1,p2,p3 : type; function name(p4:type):type; var p2:type; begin Result := p1+p4+p2; end; begin ... p3 := name(p1,p2); end;
Opérateurs
Arithmétiques
+ | Addition |
- | Subtraction |
unary (-) | Negation |
/ | Division |
* | Multiplication |
div | Integer division |
mod | Integer modulo |
Logiques
and | logical AND |
or | logical OR |
xor | logical XOR |
not | Negation |
Comparaisons
= | equal |
<> | not equal |
> | upper |
>= | upper equal |
< | lower |
<= | lower equal |
Expression
Les expressions sont évaluées de la gauche vers la droite, les termes doivent être placés entre parenthèses :
(a=b) and (c=d) ....
L'évaluation des expressions est optimisée :
// term is not evaluate. false and term // term is not evaluate. true or term
Instructions
Instruction
Les instruction doivent être séparées par un point virgule ";"
x := 1; y := 2; x := x+y;
Plusieurs instructions peuvent être assemblées en utilisant begin / end :
begin x := 1; y := 2; x := x+y; end;
Affectation
L'affectation utilise l'opérateur ":=" :
x := 1;
for
L'instruction for permet l'implémentation de boucle basées sur un index :
for index:=lower to upper do statement ; for index:=upper downto lower do statement ;
La variable d'index DOIT être une variable entière.
while
L'instruction while permet l'implémentation de boucle basées sur une expression :
while (expression) do statement ;
Le corps de la boucle peut ne pas être exécuté.
repeat
L'instruction repeat permet l'implémentation de boucle basées sur une expression :
repeat statement ; until (expression)
Le corps de la boucle sera au moins exécuté une fois.
foreach
L'instruction foreach permet l'itération à l'intérieur d'une collection :
foreach V in C do statement ; foreach V in C index I do statement ;
C DOIT être une collection (ex : liste, curseur) V DOIT être une variable du type de la collection.
Optionnellement une variable d'index I peut être utilisée, dans ce cas elle DOIT être une variable entière.
break
L'instruction break permet d'interrompre l'exécution d'une boucle :
for index:=lower to upper do begin .... if expression then break; end;
L'effet de l'instruction break est de sortir de la boucle.
L'instruction break peut être utilisée dans les boucles for,foreach,while,repeat.
continue
L'instruction continue permet d'interrompre l'exécution du corps de boucle et de passer à l'itération suivante :
for index:=lower to upper do begin if expression then continue; .... end;
L'effet de l'instruction continue est de passer à l'itération suivante.
L'instruction continue peut être utilisée dans les boucles for,foreach,while,repeat.
if
L'instruction if permet de réaliser un branchement en fonction d'un test :
if expression then statement ; if expression then statement else statement ;
case
L'instruction case n'est pas supportée.
Support des exceptions
Une exception peut être levée par le code managé, la librairie d'exécution ou le framework. Dans tous les cas les exceptions peuvent être traitées par des blocs try finally / except.
Lever une exception
L'instruction rise permet de lever une exception :
rise ERule.Create('some message here');
La classe de l'exception doit être une des classes suivantes :
ERule | Erreur métier |
Try / finally
Un bloc d'instruction Try / finally permet d'intercepter une exception en vu d'assurer l'exécution d'un code de sortie :
try statement 1; finally statement 2; end; statement 3 ;
Si une exception est levée dans le bloc 1 l'exécution se poursuit dans le bloc 2 avant de revenir au bloc supérieur. Le bloc 3 n'est jamais exécuté.
Try / except block
Un bloc d'instruction Try / except permet d'intercepter une exception en vu de traiter l'erreur :
try statement 1; except statement 2; end; statement 3;
Si une exception est levée dans le bloc 1 l'exécution se poursuit dans le bloc 2 puis dans le bloc 3.
L'objet d'exception peut être manipulé dans le bloc d'exception :
try statement 1; except on E:Exception do begin ... do something with E.Message .... statement 2; end; end; statement 3;
L'exception peut être de nouveau levée a l'intérieur d'un bloc d'exception :
try statement 1; except statement 2; raise ; end; statement 3;
Si une exception est levée dans le bloc 1 l'exécution se poursuit dans le bloc 2 puis est redéclenchée; le bloc 3 n'est pas exécuté.