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