[Madrid-pm] Una pregunta tonta

DervishD bugs en dervishd.net
Jue Abr 19 01:40:36 PDT 2007


    Hola Víctor :)

 * Victor Moral <victor en taquiones.net> dixit:
> El Miércoles, 18 de Abril de 2007 13:22, DervishD escribió:
> >  * DervishD <bugs en dervishd.net> dixit:
> > > Por otro lado, tengo una pregunta tonta: ¿cómo hago para que un
> > > método sea "interno" (privado) a un package? Sé cómo hacerlo en C
> > > pero en Perl no tengo ni idea, y he visto de todo, desde lo de los
> > > paquetes "Heavy" hasta "::private", pero ninguna de esas
> > > soluciones impide que el llamante acabe usando
> > > "Class::private->metodo_que_no_deberia_usar".
> >
> > Se me ocurre implementar los objetos como closures y dentro del
> > closure comprobar que la subrutina está siendo llamada desde su
> > propio package, pero entonces se plantean los siguientes problemas:
> 
> Un momento que me pierdo, ¿ un método privado es aquél que sólo puede
> llamarse desde el propio paquete ? Es decir, que existe en el código
> desde el principio pero que cualquier llamada desde el exterior
> resulta en ... ¿ qué  ? ¿ una excepción ? 

    Sí, más o menos es eso, con la salvedad de que el propio lenguaje no
debería permitirte llamar a ese método, debería detectar el problema en
tiempo de compilación y no de ejecución. Lo de las closures que yo
proponía era precisamente comprobar en ejecución usando caller, pero me
parece un poco burro. Además, ¿quién soy yo para no permitir que alguien
haga algo muy malo en su programa?... Perl es como Linux: "it gives you
enough rope to shoot yourself in the foot" XDD

> Es que ocultarlo como bien te han dicho no es posible, salvo que lo 
> construyas en tiempo de ejecución y lo ocultes, pero vamos, que en C es más 
> fácil porque si no recuerdo mal una función privada (static) no aparece en 
> los símbolos para el enlazador ¿ no ?

    Exacto, así lo hago precisamente en las implementaciones de objetos
que tengo hechas en C.

> En Perl no tienes más opción que confiar en el grado de civismo de los 
> usuarios y, como te han dicho (y ojo que sirve también para las clases) basta 
> con prefijarlas con un subrayado.

    Cosa que tampoco me disgusta. Me explico: si algo me gusta de C y de
Perl es que en principio no te ponen demasiadas trabas sobre lo que
puedes hacer o dejar de hacer. Es tu problema saber si está bien o no.
El "use strict" y "use warnings" los uso porque previenen cosas que se
pueden hacer mal por accidente, y no porque estés tú currándote algo que
necesita cosas raras, pero en general prefiero un lenguaje flexible y no
un lenguaje que me haga de niñera.

> > En fin, que esta vez es definitivo, dejo el LSD porque noto que no
> > me hace ningún bien XDDD
> 
>Pues sí, no hay nada como el orujo para las digestiones :-)

    Pues si tengo que dejar también el orujo... XDDD

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!


Más información sobre la lista de distribución Madrid-pm