Foreach pattern (langage)
De Wiki1000
(Différences entre les versions)
(→ForEachP pattern) |
(→ForEachP pattern) |
||
Ligne 75 : | Ligne 75 : | ||
Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]); | Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]); | ||
− | foreachP inst in cursor index count | + | 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; | end; | ||
</source> | </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 : | Variable de boucle définie dans l'instruction : | ||
Ligne 95 : | Ligne 112 : | ||
Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]); | Cursor := WFClasseA.CreateCursorWhere('','',true,['A',1]); | ||
− | foreachP var inst:WFClasseA in cursor index count | + | 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; | end; | ||
</source> | </source> |
Version du 16 septembre 2011 à 13:49
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 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]); 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;
Avec gestion de la transaction :
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;
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]); 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;
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;