[SP-pm] Variavel somente leitura

Solli Honorio shonorio em gmail.com
Segunda Abril 28 11:21:51 PDT 2008


2008/4/28 Lucas Mateus <lucasmateus.oliveira em gmail.com>:

> > Mas mesmo assim isto parece meio estranho, pois a minha dúvida com
> relação a este problema é se vc > não quer que alguém externo as tuas
> rotinas façam esta alteração, ou se é as tuas rotinas mesmo (o > que não faz
> o menor sentido pra mim, já que neste contexto vc está programando e pode
> definir que > tipo de ação cada rotina executará).
>
> Solli, aceite a afirmação: isso é necessário.
>

tudo bem cara, eu aceito a tua afirmação. Só que tem um detalhe nesta
história. Vc não está impedindo que alguém altere o teu valor, apenas está
alterando a maneira de fazer isto. Se eu eu precisava apenas fazer a
atribuição simples '$variavel = valor', estou tendo que fazer outras
'maracutaias' para atualizar o valor.

é difícil dar outra alternativa sem saber extamente o teu problema, mas na
minha visão OO poderia ajudar se você definir a "variável" em questão como
'Read Only' (utilizando o Class::Accessor) e aí nenhum método da classe
poderá alterar o conteúdo. Desta maneira se vc quiser alterar o conteúdo
terá se instanciar com outro valor.

Outra alternativa é utilizar o 'caller' para restringir realmente quem você
quer que tenha acesso de 'write' na 'propertie', tipo :

<code>
package AlgumaCoisa;
use base qw(Class::Accessor);

__PACKAGE__->mk_accessors(qw(host));

sub host {
  my $self = shift;
  my $who_is_calling_me = ( caller(1) )[3];

  if (@_) {
    if ( $who_is_calling_me eq "AlgumaCoisa::pode" ) {
      $self->{host} = $_[0];
    } else {
      die "Ta louco meu !!!";
    }
  }

  return $self->{host};
}

sub pode {
  my $self = shift;
  $self->host('troquei');
}

sub nao_pode {
  my $self = shift;
  $self->host('troquei');
}

1;

</code>

Pra mim, o código acima faz mais sentido já que estou limitando qual método
tem acesso de gravação. Claro que este cara ainda tem alguns limitantes, mas
já dá para ter uma boa idéia sobre o meu questionamento sobre a real
utilidade do código que vc está vendo e como estabelecer uma restrição mais
consistente.

Abraços,

Solli M. Honório

- -
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/saopaulo-pm/attachments/20080428/bc95d7ec/attachment.html 


Mais detalhes sobre a lista de discussão SaoPaulo-pm