• Publicidad

Espacios de nombres de los objetos y forma de referenciarlos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Espacios de nombres de los objetos y forma de referenciarlos

Notapor panterozo » 2010-03-18 11:39 @527

Tengo el siguiente problema... (no de código, sino de funcionalidad del código que estoy generando)

Se tiene:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package Datos::Operaciones::Naturales;
  2. use strict;
  3. sub new{}
  4. sub sumar{}
  5. sub restar{}
  6. sub dividir{}
  7. sub multiplicar{}
  8. 1;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Por otra parte, para obtener estos datos, suma, resta, etc, utilizo lo siguiente...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package Reporte::Mostrar;
  2. use strict;
  3. # Aquí es donde comienza mi duda...
  4. use Datos::Operaciones::Naturales;
  5. sub new{}
  6. sub Mostrar_Suma{
  7.     # Y hago la llamada así
  8.     Datos::Operaciones::Naturales::sumar();
  9. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora bien, todo perfecto... Me percaté si, de que en el use inicial del paquete Reporte::Mostrar, le indico que voy a utilizar el paquete Datos::Operaciones::Naturales, entonces, lo que hice fue lo siguiente...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package Reporte::Mostrar;
  2. use strict;
  3. use Datos::Operaciones::Naturales;
  4. sub new{}
  5. sub Mostrar_Suma{
  6.    Naturales::sumar();# Y también ha funcionado :O
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Me parece mucho más lógico el último código que he puesto, y más eficiente...
¿Cómo debería hacer este proceso? ¿1ª o 2ª forma?

¿El procesamiento que realiza Perl sobre este asunto, tiene algún tipo de relevancia?
¿Hay algún tipo de reglas sobre manejo de paquetes para tener un correcto orden final?

Yo me inclino por el primer método, pero me genera dudas, bastantes...

Suponiendo de que se encuentren en la siguiente ruta ambos archivos...
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. /home/panterozo/Proyecto/Datos/Operaciones/Naturales
  2. /home/panterozo/Proyecto/Reporte/Mostrar
  3.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Espero ser claro al exponer mi duda, no tan básica al parecer... y espero se resuelvan mis dudas y ayudar obviamente a quien le pueda ocurrir algo similar ;)
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Publicidad

Re: Espacios de nombres de los objetos y forma de referenciarlos

Notapor explorer » 2010-03-18 15:35 @691

Voy a dar una respuesta, que creo que es lo que sucede.

Al poner use Datos::Operaciones::Naturales; estamos incorporando el espacio de nombres de Naturales.pm, por lo que entonces, las variables y métodos definidos dentro de él se pueden referir como $Naturales::variable y Naturales::funcion().

Yo creo que la más correcta es la primera forma, porque explicita todo el camino o dependencia del módulo. Es decir, Naturales tiene sentido dentro de Datos::Operaciones. Si lo vemos por separado, el lector del programa puede pensar que se refiere a otra cosa que hemos llamado 'Naturales'.

En cuanto a documentación sobre módulos, hay abundante, en perldoc, en tu propio ordenador (de momento, en inglés).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Espacios de nombres de los objetos y forma de referenciarlos

Notapor kidd » 2010-03-18 18:09 @798

Mis dos centavos...

Te recomiendo que hagas uso de Exporter, y acostumbres a no exportar tus funciones por defecto, más bien hacerlo bajo pedido.

Por lo tanto quedaría:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
package Datos::Operaciones::Naturales;

use strict;
use warnings;

use base 'Exporter';
our @ISA = qw(Exporter);

#definimos las funciones que queremos exportar bajo demanda
our @EXPORT_OK = qw( sumar restar dividir multiplicar );

sub new{}  
sub sumar{}  
sub restar{}  
sub dividir{}  
sub multiplicar{}      

1;
__END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Y luego en tu otro módulo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
package Reporte::Mostrar;

use strict;

#Cargamos el módulo y definimos las funciones que queremos importar
use Datos::Operaciones::Naturales qw(sumar restar);

sub new{}

sub Mostrar_Suma{    

    sumar();
    restar();
   
    dividir(); #¡error! No importamos la función dividir()
   
}

1;
__END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La ventaja que tiene hacerlo de esta manera, es que le permites al usuario de tu módulo, definir exactamente las funciones que desea importar, principalmente evitando errores en donde estás exportando una función con un nombre que el usuario ya está utilizando.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Espacios de nombres de los objetos y forma de referenciarlos

Notapor panterozo » 2010-03-19 08:59 @416

Me gusta esa aplicación a los métodos y funciones kidd. Es mejor que mi primera y segunda opción.

Lo probaré
thanks ;)
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados