[Madrid-pm] Curso acelerado de Nes

Salvador Fandino sfandino en yahoo.com
Vie Feb 19 04:47:22 PST 2010




>
>From: Skriptke <skriptke en yahoo.es>
>To: Lista de correo de Madrid Perl Mongers <madrid-pm en pm.org>
>Sent: Fri, February 19, 2010 11:34:11 AM
>Subject: Re: [Madrid-pm] Curso acelerado de Nes
>
>
>Hombre no te iba a engañar en una cosa tan fácil de comprobar, si es un clase tipo singleton:
>
>http://github.com/Skriptke/nes/blob/master/Singleton.pm

uffs, esto no es un singleton, es un engendro demoniaco!

Reusas la instancia, pero la vuelves a inicialiar cada vez y de manera distinta según sea el primer uso o no!

La forma tradicional de programar un singleton es como sigue:

  package Foo;

  sub _new {
    my $class = shift;
    my $self = { ... };
    bless $self, $class;
    # init $self ...
    return $self;
  }

  my $singleton;

  sub instance {
    $singleton ||= __PACKAGE__->_new();
  }

Pero me da la impresión de que tu lo que quieres es un objeto que represente el contexto, el cual varia según el momento en el cual es llamado y desde donde. Osea que el objeto que devuelves cambia, así que lo que estas haciendo, en el fondo, tiene cierto sentido, pero tendrías que reestructurar el código de esa parte y organizarlo y elegir mejores nombres para todo para que se entienda.

>No requiere parámetros a no ser que para debug quieras hacer esto:
>
>http://example.com/script.cgi
>
>que tendrías que pasarle el nombre de la plantilla
>
>Pero en Nes lo normal sería hacer esto:
>
>http://example.com/template.nhtml
>
>Que no requiere nada.
>
>En realidad "new" en Perl es una convención, porque puedes llamar al constructor como quieras, pero
> como todo el mundo está acostumbrado a hacer new CGI o new lo que sea...
> Ya he visto en tus módulos utilizas "this" y no "self" supongo que antes trabajabas en C++ o Java. 

no, yo siempre utilizo $self, no se donde habras visto un $this en mi codigo, a lo mejor en algun modulo muy viejo... al principio, cuando salio Perl 5, la gente utilizaba indistintamente uno u otro. $this venia de C++, Java aun no existía y el $self venia de Smalltalk (via Python, si no recuerdo mal) que no era un lenguaje demasiado popular fuera de ciertos ámbitos... probablemente fue que Java utilizase this lo que hizo que los perleros se pasasen en masa al mas elegante $self!

> Es posible que no sea el más apropiado, pero a mi me gusto en su momento.

"Singleton->new" es un oxímoron!

La convencion en Perl es llamar "new" al constructor. Pero cuando tu clase es un singleton, *no* es al constructor a lo que llamas ("instance" es habitualmente un nombre mas apropiado, aunque no en tu caso).


>Ya te digo que esto deriva de código escrito en el 2000 o por ahí, en su momento lo llame "nes" (No Embedded Source) y lo puse en minúsculas porque no pensaba en subirlo en  a la cpan.

Bueno, cuando lo escribiste no es una disculpa, si lo publicas aquí, lo criticaremos (constructivamente, eso si :-)

- Salva


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