Re: function ... return <objet li mité>;
Thomas De Contes <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Le 17 déc. 07 à 11:12, Jean-Pierre Rosen a écrit : > Thomas De Contes a écrit : > >>>> Je me suis donné comme règle de programmation de ne jamais >>>> utiliser de pointeurs dans la partie publique des paquetages >>> Oui, mais il ne faut pas confondre pointeur et référence. C'est >>> en celà qu'un accès anonyme est différent d'un type accès explicite. >> donc >> type machin is access truc; >> ça fait un type pointeur, cad que toutes les variables de type >> machin sont des pointeurs, >> alors que si on voit "access truc" en paramètre d'une procédure, >> sans que le type machin soit cité, >> c'est une référence, >> c'est bien ça ? > Oui. ok :-) >> ça veut dire que je peux utiliser "access truc" autant que je veux >> dans la partie publique des paquetages, >> tant que je ne déclare pas de type machin (dans le code >> utilisateur non plus, bien entendu), >> je peux utiliser le paquetage comme je veux sans faire attention, >> il n'y a pas de risque de se retrouver dans un état absurde >> (référence qui pointe sur rien) ? > Et pas de Unchecked_Access bien sûr merci de me le rappeler :-) merci bcp, c'est super :-)) (ça va me simplifier un petit tas de trucs :-) ) Il me reste qqes petites inquiétudes, concernant la facilité et le "bien programmer" : >> generic >> type objetLimite is limited private; >> package objetNonLimites is >> type objetNonLimite is private; >> function contenu (onl : objetNonLimite) return objetLimite; >> private >> type objetNonLimite is record >> p : access objetLimite; >> end record; >> end objetNonLimites; function accesContenu (onl : objetNonLimite) return not null access objetLimite; Par exemple, si : - on a une fonction qui renvoie un objet de type objetNonLimite - on met la sortie de cette fonction comme paramètre d'une procédure, de mode "in" bien sur - on utilise accesContenu pour modifier objetLimite (on a le droit puisque c'est une référence (non ?)) Qu'est ce qu'il se passe ? Est ce que la variable créée par la 1ere fonction est modifiée "à la volée", puis est détruite des que la procédure se termine, sans faire aucune erreur ? ou autre chose ? >> tu parlais de "généralisation des accès anonymes en Ada2005", >> ça veut dire que maintenant on peut mettre "access truc" à des >> endroits où on pouvait pas avant ? > Oui. ok :-) >> par exemple, comme type renvoyé par une fonction ? > Oui, et aussi comme type d'un champ de record (plus besoin de faire > de type retardé pour faire une liste chainée par exemple). ok :-) Par contre, comment fais tu avec ça ? Parce qu'il faut bien faire un type pointeur pour pouvoir désallouer l'espace, quand on a fait une allocation, non ? Est ce que tu fais une spécification la plus simple possible (avec accès anonyme) dans le but qu'elle soit le plus lisible possible, et ensuite tu fais un type pointeur dans le corps pour pouvoir instancier la procédure de désallocation, que t'utilises avec une conversion explicite ? (Est ce que les types retardés ont des inconvenients en particulier ?) -- j'agis contre l'assistanat, je travaille dans une SCOP ! _______________________________________________ Site WWW de l'association Ada-France: http://www.ada-france.org/ [email protected] http://www.ada-france.org/mailman/listinfo/ada-france