Foreach pattern (langage)
De Wiki1000
(Différences 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… ») |
|||
| Ligne 1 : | Ligne 1 : | ||
===ForEach pattern=== | ===ForEach pattern=== | ||
Le pattern foreach permet de réaliser une énumération sur une collection supportant les énumérations. | 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 : | ||
| + | |||
| + | <pre> | ||
| + | foreach 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 | ||
| + | |||
| + | *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 | ||
| + | |} | ||
| + | |||
| + | *C | ||
| + | :Collection énumérable | ||
| + | |||
| + | *index I | ||
| + | :Index de boucle | ||
| + | |||
| + | *with transaction | ||
| + | :Mode de gestion de transaction | ||
| + | |||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |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 | ||
| + | |||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |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 : | ||
| + | |||
| + | <source lang="delphi"> | ||
| + | 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; | ||
| + | </source> | ||
| + | |||
[[Category:Langage]] | [[Category:Langage]] | ||
[[Category:Code pattern]]] | [[Category:Code pattern]]] | ||
Version du 20 avril 2010 à 12:25
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
- 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;
| Whos here now: Members 0 Guests 0 Bots & Crawlers 1 |