Bonjour à tous
A la lecture de certains sujets ces derniers jours, il m'a semblé que les assistants de classe ou d'enregistrement étaient largement méconnus et qu'une discussion traitant spécifiquement de ce sujet, mais surtout avec des exemples concrets, serait intéressante
Très courte introduction sur les assistants de classe (Class Helpers)
Les assistants de classe ne sont rien d'autres que l'ajout de mécanismes d'accès aux données d'une classe déterminée. C'est en sorte une amélioration de l'encapsulation (pour parler POO) de cette classe.
Il n'est pas possible d'ajouter de nouvelles propriétés par l'intermédiaire d'un assistant mais uniquement de la lecture/écriture des propriétés existantes.
Vous n'avez rien compris ? Attendez !
Voici un exemple concret que tout le monde à déjà taper des centaines de fois : ExtractFilePath(Application.ExeName);. Ne serait-il pas intéressant de pouvoir simplement invoquer Application.Path ?
Voici la déclaration et l'implémentation d'un assistant de TApplication :
et dans nos applications :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 type TApplicationHelper = class Helper for TApplication function Path(aExcludeTrailingDelimiter: boolean = FALSE) :TFileName; end; function TApplicationHelper.Path(aExcludeTrailingDelimiter: boolean): TFileName; begin Result := ExtractFilePath(ExeName); if aExcludeTrailingDelimiter then Result := ExcludeTrailingPathDelimiter(Result); end;
C'est plus clair
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //Nous pouvons remplacer ceci... MyApp := ExtractFilePath(Application.ExeName) +'MonApp.exe'; //...par cela MyApp := Application.Path +'MonApp.exe'; //et même... Path := ExcludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)); //...par... Path := Application.Path(TRUE);
Les assistants d'enregistrement
Alors que pour une classe on pourrait envisager d'autres possibilités comme TUnObjet=class(UneUnité.TUnObjet), les héritages d'enregistrement ne sont pas possibles et dans ce cas, les assistants sont une réelle aide. Ils fonctionnent la même chose que pour les classes.
Un exemple avec TRect.
J'ai souvent eu à connaitre les quatre coins d'un rectangle, mais l'implémentation existante ne permet de récupérer sous la forme d'un TPoint que les coins TopLeft et BottomRight.
Pour ajouter les deux autres:
Attention, il ne s'agit pas de disserter sur telle ou telle proposition, mais vraiment de générer une bibliothèque de codes utiles, avec exemples.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 type TRectHelper = record Helper for TRect function TopRight :TPoint; function BottomLeft :TPoint; end; function TRectHelper.BottomLeft: TPoint; begin Result.X := Left; Result.Y := Bottom; end; function TRectHelper.TopRight: TPoint; begin Result.X := Right; Result.Y := Top; end;
Répondre C'est super ! ou à l'inverse Comment je pourrais faire ça ? n'est pas le but ! Mais si un code vous semble intéressant (voire carrément utile), n'hésitez pas à voter
Partager