Notation pointée
Thomas De Contes via Ada-france <[email protected]> Thu, 4 Nov 2021 05:31:46 +0100
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Bonjour :-)
La notation pointée n'est accessible pour appeler des sous-programmes qu'avec les types taggés. Pourquoi ?
Je viens de m'apercevoir de son coté pratique,
et je ne comprend pas ce qu'il peut y avoir comme inconvénient à étendre ça aux types non-taggés, puisque c'est en gros seulement une affaire de visibilité, je ne vois rien comme mécanisme qui soit spécifique aux tags.
Y a-t-il une bonne raison qui fait qu'on ne peut pas espérer l'avoir dans une future version du langage ?
1)
J'ai découvert ça notamment parce que j'avais dans les mains un type qui se trouvais taggé, malgré l'inutilisation des tags.
Avez vous un avis sur ce que j'ai de mieux à faire, pour faire le meilleur code possible ?
- Supprimer l'aspect "taggé", parce que pas besoin des tags ?
- Conserver l'aspect "taggé", parce que l'avantage de la notation pointée est suffisant pour le justifier ?
2)
package mcc.Common_Dialogs is
type File_Dialog_Type is (Open, Save_As);
procedure File_Dialog
(Dialog_Type : in File_Dialog_Type;
FileName : out Ada.Strings.Unbounded.Unbounded_String;
Initial_Dir : in String := Ada.Directories.Current_Directory;
Title : in String := "";
-- Title : in String := File_Dialog_Type'Image (Dialog_Type);
File_Types : in String := "";
Default_Ext : in String := "");
end mcc.Common_Dialogs;
Pour utiliser ça, j'aimerais idéalement pouvoir faire quelque chose comme ça :
mcc.Common_Dialogs.File_Dialog (Open, FileName);
"use type mcc.Common_Dialogs.File_Dialog_Type;" est insuffisant, c'est comme si je n'avais mis aucune clause "use" :
mcc.Common_Dialogs.File_Dialog (mcc.Common_Dialogs.Open, FileName);
Avec "use all type mcc.Common_Dialogs.File_Dialog_Type;" je n'ai plus du tout besoin de pointer , comme avec avec "use mcc.Common_Dialogs;", ce que je trouve un peu trop souple.
J'espérais pouvoir écrire :
mcc.Common_Dialogs.Open.File_Dialog (FileName);
(Graphiquement ça aurais été chouette, nan ? Surtout en remplaçant File_Dialog par Dialog :-) )
Y a-t-il une autre solution à laquelle je n'ai pas encore pensé ?
3)
Un peu de la même façon, ça serais chouette de pouvoir remplacer
Ada.Strings.Unbounded.To_String (Window.FileName)
par
Window.FileName.To_String
sans clause "use" qui a tendance à flouter, ni aucune sorte d'ambiguité possible :-)
Est-il possible de rendre un type taggé en le dérivant (en l'occurrence Unbounded_String) ?
(Si on est obligé de l'encapsuler dans un nouvel enregistrement, ça en ferais une usine à gaz non rentable)
Question connexe :
Y a-t-il un équivalent pour les constructeurs ?
Si non, le petit inconvénient que donnerais la notation pointée appliquée à Unbounded_String serait l'asymétrie dans l'écriture entre To_String et To_Unbounded_String.
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
_______________________________________________
Ada-france mailing list
[email protected]
https://mail.ada-france.org/cgi-bin/mailman/listinfo/ada-france