Re: Lisibilité - Notation pointée / use all type

Thomas De Contes via Ada-france <[email protected]> Sun, 9 Jan 2022 06:57:44 +0100
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Le 6 déc. 2021 à 06:34, Jean-Pierre Rosen via Ada-france a écrit :

> Remarque préliminaire: la lisibilité, c'est souvent une question de goût personnel. Ca se résume souvent à "ce que j'écris est lisible, ce que tu écris ne l'est pas".

:-D
Merci de le rappeler :-)


> 
> Le 05/12/2021 à 23:49, Thomas De Contes via Ada-france a écrit :

>> Notation pointée
>> [...]
> Perso, je trouve la notation pointée moins lisible, car je suis partisan du "use"

> (à condition de le limiter à la portée la plus restreinte où il est nécessaire),

Bien sur : ça permet de limiter la zone où on doit chercher avec attention les éléments du paquetage. :-)


> et que je trouve que c'est plus près de la formulation naturelle:
> "déplacer le carré"=> Deplacer (Carre)
> plutôt que Carre.Deplacer qui m'oblige à lire de droite à gauche...

Pour moi ça ne compte pas énormément, parce que Ada n'est ni du français ni vraiment de l'anglais, et il suffit de connaitre le (et d'avoir l'habitude du) langage qu'on manipule.
En français, le verbe est placé au milieu, entre le sujet et le complément, alors qu'il me semble que c'est lui qui est considéré comme l'élément le plus important.

En POO, il me semble que les types sont plus importants que leurs primitives.
Ça ne me parait pas saugrenu de considérer que quand on appelle une primitive sur une donnée, la donnée est plus importante que la primitive qu'on lui applique (c'est pas évident mais ça se discute).


Est-ce que ça te dérangerais d'envisager l'extension de l'usage de la notation pointée, pour donner plus de choix aux programmeurs ?
(Ça ne changerais absolument rien pour les programmes que t'écris, mais bien sur ça pourrais t'amener à en lire qui soient écrits dans un style que tu n'aimes pas ...)


> 
>> Si non, est-ce que vous êtes d'accord avec moi, ou est-ce que vous trouvez que ça ne sert à rien ?
>> - Pas de clause "use" qui rend trop de choses visibles,
> Entre "use", "use type", "use all type", on a beaucoup de précision dans ce qu'on souhaite laisser visible.


Le 6 déc. 2021 à 02:04, Nicolas Boulenguez a écrit :

>> [La notation pointée évite de nommer le paquet complet de chaque méthode]
>> - Pas de clause "use" qui rend trop de choses visibles,
> 
> 'use type'

?

> et 'use all type' rendent souvent le même service que la
> notation pointée.

En fait, psychologiquement, la notation pointée me parait beaucoup plus sure que "use all type", parce que :
- "use all type" rend visible un tas de choses qui n'ont plus besoin d'être "pointées" (dit-on ça comme ça ?), un peu comme "use" même s'il y en a un peu moins,
- la notation pointée ne fais pas ça, il n'y a aucun supplément de visibilité : on part de la variable dont le type est déjà connu, donc c'est un autre mécanisme.

Sauf que si c'est équivalent sous tous les aspects (fiabilité, risques de collision, ...), j'ai probablement tord de raisonner comme ça ...

En fait, quand je me suis retrouvé avec cette question, j'avais de grands morceaux de code avec des appels à un paquetage un peu diffus mais quand même récurrents, donc nombreux sur la longueur. Toujours faits sur la même variable.
Je suppose que l'auteur ne voulais pas mettre un "use" pour qu'on voit bien l'usage de ce paquetage là à chaque appel.
Il me semblait que la notation pointée permet de ne pas réduire la lisibilité à ce niveau là, du fait d'avoir la variable comme point de départ. Pourtant, même avec un "use", on a aussi la variable qui est mentionnée à chaque fois.
Qu'est-ce que j'ai comme biais ?


> 
> procedure Tmp is
>   use all type Ada.Strings.Unbounded.Unbounded_String;
>   use all type Ada.Text_IO.File_Type;
> 
>   File   : Ada.Text_IO.File_Type;
>   Buffer : Ada.Strings.Unbounded.Unbounded_String;
> begin

Là, petit inconvénient de "use all type" par rapport à la notation pointée : le type et son paquetage sont en double (et souvent au même endroit, donc inutile pour la lisibilité, ça alourdit un peu).
(Et avec "use" on n'a pas de doublon, mais le paquetage et le type sont séparés, ce qui baisse la lisibilité ou la robustesse.)


>   Set_Unbounded_String (Buffer, "Hello");

Si je ne me trompe pas, "use all type" a un avantage net, c'est que "To_Unbounded_String" est visible. :-)


>   Create (File, Ada.Text_IO.Out_File, "out.txt");

Si j'ai bien compris, pour définir les primitives il suffit d'avoir n'importe quel paramètre qui utilise le type, c'est à dire pas forcément le 1er, comme pour la notation pointée ?
Donc "use all type Ada.Text_IO.File_Mode" donne lui aussi Create Open Reset et Mode ?


Il devrait rester un seul cas de figure où je pourrais trouver ça casse-pied, c'est pour File_Dialog, du fait qu'il n'y a pas de vrai type "parent" pour ce sous-programme du point de vue du programmeur, et que File_Dialog_Type prend sa place du point de vue du compilateur :

Y a-t-il une raison particulière pour laquelle les types énumérés génèrent pour leurs éléments des fonctions plutôt que des constantes ?
J'ai toujours trouvé ça curieux, mais dans ce cas particulier ça me gêne du fait de la visibilité avec "use all type", puisque ça autorise à écrire :
   File_Dialog (Open, FileName);
Alors que sinon, avec des constantes on serais obligés d'écrire :
   File_Dialog (mcc.Common_Dialogs.Open, FileName);
Ce qui serais raccord avec l'obligation de mettre le nom complet du type pour déclarer la variable.


-- 
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