Langage

De Wiki1000
(Différences entre les versions)
Ligne 1 : Ligne 1 :
==Overview==
+
==Introduction==
The line 1000 language is a managed language which inherits from object Pascal.  
+
Le langage 1000 est un langage managé dont la syntaxe hérite du Pascal Objet.
  
Main differences between Line 1000 and Object Pascal are list below :  
+
Les différences principales avec le Pascal Objet sont les suivantes :
  
*They is no supports to define types, classes and structures because this part must be done at the Model level.
+
*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.
*There is no support for SET types and operators
+
*The memory is managed so there is no need to explicitly allocate or free memory.
+
  
==Language features==
+
*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.
===Block of code===
+
 
A block of code has the fallowing structure :  
+
*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>
  
declarations may be variable, procedure or function declaration.
+
La partie déclaration peut contenir des déclarations de variables ou de procédures imbriquées.
  
 
===Variables===
 
===Variables===
Variables MUST be explicitly declared using the fallowing syntax :  
+
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===
The language supports strong type declaration and compiler check for type integrity; nevertheless, for compatibility reasons, type checking generate warning message and not errors.
+
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 signed integer
+
|Entier 32 bit signé
 
|-
 
|-
 
|longint
 
|longint
 
|
 
|
|64 bit signed integer
+
|Entier 64 bit signé
 
|-
 
|-
 
|double
 
|double
 
|float
 
|float
|double precision float
+
|Nombre flottant double précision
 
|-
 
|-
 
|currency
 
|currency
 
|decimal
 
|decimal
|currency fixed point 4 decimals
+
|Valeur monétaire virgule fixe à 4 décimales
 
|-
 
|-
 
|boolean
 
|boolean
 
|
 
|
|logical type
+
|Valeur logique vrai ou fausse
 
|-
 
|-
 
|string
 
|string
 
|anyURI
 
|anyURI
|AnsiString (**)
+
|Chaîne de caractère (**)
 
|-
 
|-
 
|char
 
|char
 
|
 
|
|Character
+
|Caractère
 
|-
 
|-
 
|enum
 
|enum
 
|
 
|
|Enumeration
+
|Enumération
 
|-
 
|-
 
|TDatetime
 
|TDatetime
 
|datetime
 
|datetime
|Date and time encoded as double
+
|Date et heure encodée en double
 
|-
 
|-
 
|date
 
|date
 
|
 
|
|Date encoded as double  
+
|Date encodée en double
 
|-
 
|-
 
|time
 
|time
 
|
 
|
|Time encoded as double
+
|Heure encodée en double
 
|-
 
|-
 
|variant
 
|variant
 
|
 
|
|Variable container with dynamic type information
+
|Containeur de variable de type dynamique.
 
|-
 
|-
 
|TClass
 
|TClass
 
|
 
|
|Generic class type
+
|Type classe générique
 
|-
 
|-
 
|TObject
 
|TObject
 
|
 
|
|Generic object type
+
|Type objet générique
 
|-
 
|-
 
|TPersistent
 
|TPersistent
 
|
 
|
|Generic persistent type
+
|Type persistent générique
 
|}
 
|}
(*) Alias are defined to support SOAP serialization
+
(*) Les alias sont définis pour supporter les sérialisation SOAP
  
(**) String encoding may be dependent of the Line 1000 release, until and including release 5.60 the string encoding is Ansi based. In the future the string encoding may be unicode based.
+
(**) 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.
  
These types are defined to support SOAP serialization :
+
Les types suivants sont spécifiquement introduis pour le support de la sérialisation SOAP :
  
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 133 : Ligne 137 :
 
|}
 
|}
  
===Literals===
+
===Constantes===
===Constants===
+
Il ni a pas de support pour déclarer des constantes.
There is no support at this time to declare constant inside a code block.
+
  
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 157 : Ligne 160 :
 
| 'This is a string with a '' quote'
 
| 'This is a string with a '' quote'
 
|}
 
|}
===Procedures and functions===
+
===Procedures et fonctions===
Like in Pascal language procedures and functions may be embedded inside a code block :
+
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>
  
==Operators==
+
==Opérateurs==
===Arithmetic===
+
===Arithmétiques===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Ligne 202 : Ligne 205 :
 
|}
 
|}
  
===Logical===  
+
===Logiques===  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Ligne 218 : Ligne 221 :
 
|}
 
|}
  
===Comparison===
+
===Comparaisons===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Ligne 241 : Ligne 244 :
  
 
==Expression==
 
==Expression==
Expression are evaluate left to right, each term must be parenthesized :  
+
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>
  
Expression evaluation are optimized :
+
L'évaluation des expressions est optimisée :
  
 
<pre>
 
<pre>
Ligne 258 : Ligne 261 :
  
 
==Instructions==
 
==Instructions==
===Statement===
+
===Instruction===
Statements are delimited by semi column ";"
+
Les instruction doivent être séparées par un point virgule ";"
  
 
<pre>
 
<pre>
Ligne 267 : Ligne 270 :
 
</pre>
 
</pre>
  
Several statements may be combined in a single statement using begin / end :
+
Plusieurs instructions peuvent être assemblées en utilisant begin / end :
  
 
<pre>
 
<pre>
Ligne 277 : Ligne 280 :
 
</pre>
 
</pre>
  
===Assignment===
+
===Affectation===
Assignment used the := operator :
+
L'affectation utilise l'opérateur ":=" :
  
 
<pre>
 
<pre>
Ligne 285 : Ligne 288 :
  
 
===for===
 
===for===
The for instruction allow implementation on index based loop :
+
L'instruction for permet l'implémentation de boucle basées sur un index :
  
 
<pre>
 
<pre>
Ligne 295 : Ligne 298 :
 
</pre>
 
</pre>
  
The index variable MUST BE an integer variable.
+
La variable d'index DOIT être une variable entière.
  
 
===while===
 
===while===
The while instruction allow implementation of expression based loop :
+
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===
The repeat instruction allow implementation of expression based loop :
+
L'instruction repeat permet l'implémentation de boucle basées sur une expression :
  
 
<pre>
 
<pre>
Ligne 314 : Ligne 319 :
 
</pre>
 
</pre>
  
Unlike while construction the repeat statement will be executed at least one time.
+
Le corps de la boucle sera au moins exécuté une fois.
  
 
===foreach===
 
===foreach===
The foreach instruction allow iterations inside a collection :
+
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 MUST be a collection  
+
C DOIT être une collection (ex : liste, curseur)
V MUST be a variable of the collection type
+
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===
The break instruction allow exiting a loop, it can be used in any loop construction.
+
L'instruction break permet d'interrompre l'exécution d'une boucle :
  
 
<pre>
 
<pre>
Ligne 338 : Ligne 348 :
 
</pre>
 
</pre>
  
The effect of the break instruction is to exit the loop.
+
L'effet de l'instruction break est de sortir de la boucle.
  
Break instruction could be used inside for, while, repeat, foreach loop instructions.
+
L'instruction break peut être utilisée dans les boucles for,foreach,while,repeat.
  
 
===continue===
 
===continue===
The continue instruction allow resuming a loop, it can be used in any loop construction.
+
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>
  
The effect of the continue instruction is to branch at start of the loop.
+
L'effet de l'instruction continue est de passer à l'itération suivante.
  
Continue instruction could be used inside for, while, repeat, foreach loop instructions.
+
L'instruction continue peut être utilisée dans les boucles for,foreach,while,repeat.
  
 
===if===
 
===if===
The if instruction allow implementation of test and branch :
+
L'instruction if permet de réaliser un branchement en fonction d'un test :
  
 
<pre>
 
<pre>
Ligne 367 : Ligne 377 :
  
 
===case===
 
===case===
The case instruction is not supported at this time.
+
L'instruction case n'est pas supportée.
  
===Exception support===
+
===Support des exceptions===
Exception may be rise easer by managed code or by runtime and framework code. In both case the exception may be trap and managed using the try / finally / except construction.
+
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 :
  
====Rising an exception====
 
The rise instruction allow rising an exception :
 
 
<pre>
 
<pre>
 
   rise ERule.Create('some message here');
 
   rise ERule.Create('some message here');
 
</pre>
 
</pre>
  
The exception type MUST be of the fallowing class :  
+
La classe de l'exception doit être une des classes suivantes :  
  
* ERule
+
{| class="wikitable"
 
+
|-
====Try / finally block====
+
|ERule
 +
|Erreur métier
 +
|}
  
The Try/finally block construction may trap an exception to ensure execution of an exit code :
+
====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>
  
if an exception occurs in statement 1 the execution flow will branch in statement 2 and then exit from main block; the statement 3 is not executed.
+
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====
The Try/finally block construction may trap an exception to manage the exception :
+
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>
  
if an exception occurs in statement 1 the execution flow will branch in statement 2 and then continue in 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.
  
The exception message may be catch and used in the exception block :
+
L'objet d'exception peut être manipulé dans le bloc d'exception :
  
 
<pre>
 
<pre>
Ligne 426 : Ligne 440 :
 
</pre>
 
</pre>
  
Inside an exception block the exception may be re-trigger :
+
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>
  
if an exception occurs in statement 1 the execution flow will branch in statement 2 and the exception will be re-rise; the statement 3 is not executed.
+
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é.
  
==Magic functions==
+
==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é.

Fonctions magiques

Assign()

TP()

IS

AS

Outils personnels