Foreach pattern (langage)

De Wiki1000
(Différences entre les versions)
Ligne 11 : Ligne 11 :
 
*V variable de boucle
 
*V variable de boucle
 
:Doit être du type de l'énumération
 
:Doit être du type de l'énumération
 +
 +
{{tip|Certains énumérateurs supportent un type par défaut pour la variable de boucle, ceci permet de définir la variable de boucle dans l'instruction sans définir son type}}
  
 
*in|from
 
*in|from
Ligne 84 : Ligne 86 :
 
end;
 
end;
 
</source>
 
</source>
 +
 +
Variable de boucle définie dans l'instruction :
 +
 +
<source lang="delphi">
 +
var list:WFClasseAList; cursor:WFClasseACursor; count:Integer; tk:Int64;
 +
begin
 +
  List := WFClasseA.CreateList;
 +
  Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]);
 +
 +
  foreachP var inst:WFClasseA in cursor index count with long transaction do
 +
  begin
 +
    List.AddRef(inst);
 +
    if List.Count=100 then
 +
      begin
 +
        parallel doProcessList(List);
 +
        List.Clear;
 +
      end;
 +
  end;
 +
end;
 +
</source>
 +
 +
Variable de boucle typée par l'énumération :
 +
 +
<source lang="delphi">
 +
var list:WFClasseAList; cursor:WFClasseACursor; count:Integer; tk:Int64;
 +
begin
 +
  List := WFClasseA.CreateList;
 +
  Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]);
 +
 +
  foreachP var inst in cursor index count with long transaction do
 +
  begin
 +
    List.AddRef(inst);
 +
    if List.Count=100 then
 +
      begin
 +
        parallel doProcessList(List);
 +
        List.Clear;
 +
      end;
 +
  end;
 +
end;
 +
</source>
 +
 +
{{info|La portée des variable de boucle définie dans l'instruction est limitée à l'instruction}}
  
  

Version du 1 septembre 2011 à 16:37

versionthaoe-48x48.png

ForEach pattern

Le pattern foreach permet de réaliser une énumération sur une collection supportant les énumérations.

Les différentes syntaxes de ce pattern sont :

foreach V in|from C [index I] [with [distinct|global|long] transaction] [on except break|continue]  do Statement 
  • V variable de boucle
Doit être du type de l'énumération
Tip-20px.png Tip : Certains énumérateurs supportent un type par défaut pour la variable de boucle, ceci permet de définir la variable de boucle dans l'instruction sans définir son type
  • in|from
Mode de gestion de l'énumération
in Get L'instance est obtenue de l'énumération
from GetAndRemove L'instance est obtenue puis retirée de l'énumération
  • C
Collection énumérable
  • index I
Index de boucle
  • with transaction
Mode de gestion de transaction
aucun Pas de gestion de transaction
distinct Une transaction par corps de boucle.
global Une transaction pour l'ensemble de la boucle.
long Une transaction longue pour l'ensemble du corps de boucle.
  • on except
Mode de gestion des exceptions
aucun Une exception arrête l'instruction et est propagée.
break Une exception arrête l'instruction et est propagée.
continue Une exception est trappée et n'arrête pas l'instruction.

Exemple :

var list:WFClasseAList; inst:WFClasseA; cursor:WFClasseACursor; count:Integer; tk:Int64;
begin
  List := WFClasseA.CreateList;
  Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]);
 
  foreachP inst in cursor index count with long transaction do
   begin
     List.AddRef(inst);
     if List.Count=100 then
      begin
        parallel doProcessList(List);
        List.Clear;
      end;
   end;
end;

Variable de boucle définie dans l'instruction :

var list:WFClasseAList; cursor:WFClasseACursor; count:Integer; tk:Int64;
begin
  List := WFClasseA.CreateList;
  Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]);
 
  foreachP var inst:WFClasseA in cursor index count with long transaction do
   begin
     List.AddRef(inst);
     if List.Count=100 then
      begin
        parallel doProcessList(List);
        List.Clear;
      end;
   end;
end;

Variable de boucle typée par l'énumération :

var list:WFClasseAList; cursor:WFClasseACursor; count:Integer; tk:Int64;
begin
  List := WFClasseA.CreateList;
  Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]);
 
  foreachP var inst in cursor index count with long transaction do
   begin
     List.AddRef(inst);
     if List.Count=100 then
      begin
        parallel doProcessList(List);
        List.Clear;
      end;
   end;
end;
Info-20px.png Note : La portée des variable de boucle définie dans l'instruction est limitée à l'instruction
]
Outils personnels