Vue locale (langage)
De Wiki1000
(Différences entre les versions)
Ligne 28 : | Ligne 28 : | ||
<pre> | <pre> | ||
+ | BNF style grammar : | ||
+ | |||
+ | <nom_vue> ::= ViewOf(<nom_classe>) [<attribute_def>] end | ||
+ | <nom_classe> ::= identifier | ||
+ | <attribute_def> ::= <simple_attribute_def> | <simple_attribute_def> <attribute_directive> | ||
+ | <simple_attribute_def> ::= <attribute_dec> | <attribute_dec> = <attribute_ref> | ||
+ | <attribute_dec> ::= <attribute_name> : <type_name> | ||
+ | <attribute_ref> ::= <main_class_attribute_name> | <operator>(<main_class_attribute_name>) | ||
+ | <operator> ::= <agregate_operator> | <date_operator> | ||
+ | <agregate_operator> ::= count|sum|max|min | ||
+ | <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second | ||
+ | <attribute_directive> ::= primary | orderby | orderby desc | ||
+ | |||
Type | Type | ||
NomDeVue = ViewOf(NomDeClassePrincipale) | NomDeVue = ViewOf(NomDeClassePrincipale) | ||
Attribut : Type; | Attribut : Type; | ||
Attribut : Type = AliasDe; | Attribut : Type = AliasDe; | ||
+ | Attribut : Type = operator(AliasDe); | ||
+ | Attribut : Type = AliasDe primary; | ||
+ | Attribut : Type = AliasDe orderby; | ||
+ | Attribut : Type = AliasDe orderby desc; | ||
end; | end; | ||
</pre> | </pre> |
Version du 19 septembre 2011 à 10:36
Les vues locales sont des type de données vues déclarées localement à l'intérieur d'une opération.
Par exemple le code suivant déclare une vue MyView et effectue une recherche sur cette vue :
function foo(const S:string):Integer; Type MyView = viewof(ClassA) unCode:string = unCodeA; unEntier:Integer = refB.unEntierB; end; var inst:MyView; begin inst := MyView.Find('unCode=%1','',true,['B1']); if Assigned(inst) then begin ... end; end
Le périmètre du type est limité à la procédure, il n'est donc pas possible de passer les objets de la vue en paramètre à d'autres fonctions (pour cela utilisez une vue globale).
La syntaxe pour définir une vue locale :
BNF style grammar : <nom_vue> ::= ViewOf(<nom_classe>) [<attribute_def>] end <nom_classe> ::= identifier <attribute_def> ::= <simple_attribute_def> | <simple_attribute_def> <attribute_directive> <simple_attribute_def> ::= <attribute_dec> | <attribute_dec> = <attribute_ref> <attribute_dec> ::= <attribute_name> : <type_name> <attribute_ref> ::= <main_class_attribute_name> | <operator>(<main_class_attribute_name>) <operator> ::= <agregate_operator> | <date_operator> <agregate_operator> ::= count|sum|max|min <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second <attribute_directive> ::= primary | orderby | orderby desc Type NomDeVue = ViewOf(NomDeClassePrincipale) Attribut : Type; Attribut : Type = AliasDe; Attribut : Type = operator(AliasDe); Attribut : Type = AliasDe primary; Attribut : Type = AliasDe orderby; Attribut : Type = AliasDe orderby desc; end;
Les vues peuvent utiles pour effectuer des traitement sur des classes complexes, par exemple il est possible d'utiliser un curseur sur une classe vue :
function foo(const S:string):Integer; Type MyView = viewof(ClassA) newCode:string; unCode:string = unCodeA; unEntier:Integer = refB.unEntierB; end; var inst:MyView; cursor:MyViewCursor begin Result := 0; cursor := MyView.CreateCursorWhere(''unCode=%1'','''',true,[S]); foreach inst in cursor do begin Result := Result + inst.unEntier; end; end;
Voir aussi :