« Foreach pattern (langage) » : différence entre les versions
(Page créée avec « ===ForEach pattern=== Le pattern foreach permet de réaliser une énumération sur une collection supportant les énumérations. Category:Langage [[Category:Code pattern… ») |
Aucun résumé des modifications |
||
(15 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
=== | {{new|650}} | ||
Le pattern | ===ForEachP pattern=== | ||
Le pattern foreachP permet de réaliser une énumération sur une collection supportant les énumérations. | |||
Les différentes syntaxes de ce pattern sont : | |||
<pre> | |||
foreachP V in|from C [index I] [with [distinct|global|long] transaction] [on except break|continue] do Statement | |||
</pre> | |||
*V variable de boucle | |||
: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 en utilisant la syntaxe : foreachP var inst in ....}} | |||
*in | from | |||
:Mode de gestion de l'énumération | |||
{| class="wikitable" | |||
|- | |||
|in | |||
|Get | |||
|L'instance est obtenue de l'énumération. | |||
|- | |||
|from | |||
|GetAndRemove | |||
|L'instance est obtenue puis retirée de l'énumération. | |||
|} | |||
{{tip|in et from sont équivalents pour un curseur.}} | |||
*C | |||
:Collection énumérable | |||
*index I | |||
:Index de boucle | |||
*with [ distinct | global | long ] transaction | |||
:Mode de gestion de transaction | |||
{| class="wikitable" | |||
|- | |||
|aucun | |||
|Pas de gestion de transaction | |||
|- | |||
|transaction | |||
|Une transaction par corps de boucle. | |||
|- | |||
|distinct transaction | |||
|Une transaction par corps de boucle. | |||
|- | |||
|global transaction | |||
|Une transaction pour l'ensemble de la boucle. | |||
|- | |||
|long transaction | |||
|Une transaction longue pour l'ensemble du corps de boucle. | |||
|} | |||
*on except | |||
:Mode de gestion des exceptions | |||
{| class="wikitable" | |||
|- | |||
|break | |||
|Une exception arrête l'instruction et est propagée. | |||
|- | |||
|continue (par défaut) | |||
|Une exception est trappée et n'arrête pas l'instruction. | |||
|} | |||
{{tip|Lorsque le mode de gestion des exceptions est ''continue'' l'itération dans laquelle se produit l'exception sera interrompue. L'exception est ensuite ignorée et l'exécution de la boucle reprend.}} | |||
Exemples : | |||
<source lang="delphi"> | |||
var list:WFClasseAList; inst:WFClasseA; cursor:WFClasseACursor; count:Integer; tk:Int64; | |||
begin | |||
List := WFClasseA.CreateList; | |||
Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]); | |||
with long transaction do | |||
foreachP inst in cursor index count do | |||
begin | |||
List.AddRef(inst); | |||
if List.Count=100 then | |||
begin | |||
parallel doProcessList(List); | |||
List.Clear; | |||
end; | |||
end; | |||
end; | |||
</source> | |||
'''Avec gestion de la transaction :''' | |||
<source lang="delphi"> | |||
var 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(100) transaction do | |||
begin | |||
parallel doProcessInstance(inst); | |||
end; | |||
end; | |||
</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]); | |||
with long transaction do | |||
foreachP var inst:WFClasseA in cursor index count 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}} | |||
[[Category:Langage]] | [[Category:Langage]] | ||
[[Category:Code pattern]]] | [[Category:Code pattern]] | ||
[[Category:Version650]] |
Dernière version du 10 février 2016 à 15:22
stock}} |
ForEachP pattern
Le pattern foreachP permet de réaliser une énumération sur une collection supportant les énumérations.
Les différentes syntaxes de ce pattern sont :
foreachP 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
- 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 [ distinct | global | long ] transaction
- Mode de gestion de transaction
aucun | Pas de gestion de transaction |
transaction | Une transaction par corps de boucle. |
distinct transaction | Une transaction par corps de boucle. |
global transaction | Une transaction pour l'ensemble de la boucle. |
long transaction | Une transaction longue pour l'ensemble du corps de boucle. |
- on except
- Mode de gestion des exceptions
break | Une exception arrête l'instruction et est propagée. |
continue (par défaut) | Une exception est trappée et n'arrête pas l'instruction. |
![]() |
Tip : Lorsque le mode de gestion des exceptions est continue l'itération dans laquelle se produit l'exception sera interrompue. L'exception est ensuite ignorée et l'exécution de la boucle reprend. |
Exemples :
<source lang="delphi"> var list:WFClasseAList; inst:WFClasseA; cursor:WFClasseACursor; count:Integer; tk:Int64; begin
List := WFClasseA.CreateList; Cursor := WFClasseA.CreateCursorWhere(,,true,['A',1]);
with long transaction do foreachP inst in cursor index count do begin List.AddRef(inst); if List.Count=100 then begin parallel doProcessList(List); List.Clear; end; end;
end; </source>
Avec gestion de la transaction :
<source lang="delphi"> var 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(100) transaction do begin parallel doProcessInstance(inst); end;
end; </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]);
with long transaction do foreachP var inst:WFClasseA in cursor index count 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>